HOJ1215 HDU1203
来源:互联网 发布:app开发编程 编辑:程序博客网 时间:2024/05/23 21:01
两道题都是01背包的入门题。共同点:求放入背包物品的最小值。区别:前者的容量有下限(这和一般的背包相反)。
有一个tip:使用memset函数要注意,它并不是简单的初始化,慎用。
HOJ1215
转化为求”使得血量达到100所消耗分数的最小值“
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int INF = 0x3f3f3f3f;const int MAX = 10010;int dp[10020];int main(){ int t; scanf("%d", &t); while(t--){ int hp; scanf("%d", &hp); int n, sum = 0; scanf("%d", &n); int c[10020], v[10200]; for(int i = 1; i <= n; i++){ scanf("%d %d", &c[i], &v[i]); sum += v[i]; } for(int i = 1; i <= MAX; i++) dp[i] = INF; for(int i = 1; i <= n; i++) for(int j = MAX; j >= c[i]; j--) dp[j] = min(dp[j], dp[j - c[i]] + v[i]); int res = INF; for(int i = hp; i <= MAX; i++) res = min(res, dp[i]); if(res == INF) res = 0; else res = sum - res; printf("%d\n", res); } return 0;}
HDU1203
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int main(){ int n, m; while(scanf("%d %d", &n, &m) != EOF && (n || m)){ int c[10005]; double v[10005]; for(int i = 1; i <= m; i++){ scanf("%d %lf", &c[i], &v[i]); v[i] = 1 - v[i]; } double dp[10010]; for(int i = 0; i <= 10005; i++) dp[i] = 1; for(int i = 1; i <= m; i++) for(int j = n; j >= c[i]; j--) dp[j] = min(dp[j], dp[j - c[i]] * v[i]); printf("%.1lf", 100 * (1 - dp[n])); puts("%"); } return 0;}
0 0
- HOJ1215 HDU1203
- hdu1203
- HDU1203
- HDU1203
- hdu1203
- hdu1203
- hdu1203
- hdu1203
- HDU1203(01)
- HDU1203 01背包
- hdu1203(01背包)
- HDU1203(01背包)
- hdu1203 01背包
- HDU1203-动态规划DP
- hdu1203(01背包)
- hdu1203(01背包)
- HDU1203 DP-01背包
- hdu1203 01背包问题
- SpringMVC
- 蓝桥杯 兰顿蚂蚁 (模拟)
- 近期见闻分享——2015年1月
- 开篇了
- 数学之路-sas备忘(1)
- HOJ1215 HDU1203
- PHP函数的应用
- hdu 1867 A + B for you again (kmp扩展)
- bugzilla 安装遇坑1 apache不解析cgi
- poj 1067 威佐夫博弈
- 开机启动/etc/rc.local失效无效怎么办?解决方法
- python调用ADO处理2进制字段例子
- POJ 2761 依然是平衡树
- java多线程