HDU 2844(多重背包)
来源:互联网 发布:java 项目中使用log4j 编辑:程序博客网 时间:2024/06/06 20:27
如果没有多重背包没有那个if,也就是不考虑完全背包,全部当成01背包时间,时间会翻倍。
#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<vector>#include<algorithm>#include<iostream>#include<time.h>using namespace std;int dp[100005];int a[100005];int c[100005];int n, m;int i, j, k;void ZeroOne(int value,int weight){ for (k = m; k >=value; k--) dp[k] = max(dp[k], dp[k -value] + weight);}void Complete(){ for (j = a[i]; j <= m; j++) dp[j] = max(dp[j], dp[j - a[i]] + a[i]);}void Multiply(){ if (c[i] * a[i] > m) { Complete(); } else { for (j = 1; j <= c[i]; j <<= 1) { c[i] -= j; ZeroOne(j*a[i], j*a[i]); } ZeroOne(c[i] * a[i], c[i] * a[i]); }}int vs_main(){ while (cin >> n >> m, n + m) { memset(dp, 0, sizeof(dp)); memset(a, 0, sizeof(a)); memset(c, 0, sizeof(c)); for (i = 1; i <= n; i++) { cin >> a[i]; } for (i = 1; i <= n; i++) { cin >> c[i]; } for (i = 1; i <= n; i++) { Multiply(); } int count = 0; for (i = 1; i <= m; i++) if (dp[i] == i) count++; cout << count << endl; } return 0;}
0 0
- hdu 2844(多重背包)
- HDU 2844(多重背包)
- HDU 2844(多重背包)
- HDU-2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- HDU 2844 Coins(多重背包)
- hdu 2844 Coins (多重背包)
- hdu 2844 Coins(多重背包优化)
- [ACM] hdu 2844 Coins (多重背包)
- Android NDK开发——环境配置
- [线性代数]Note4--A的LU分解&转置-置换-向量空间
- java三大框架spring的JdbcTemplate连接数据库(C3P0)
- (模板题)poj 2115 C Looooops(扩展欧几里得算法)
- MD5加密
- HDU 2844(多重背包)
- Java EE容器
- Oulipo HDU杭电1686【KMP】
- HDU 5715 XOR 游戏(二分+dp+01字典树)
- 哈夫曼树
- VB6 基于API的远程开机代码
- 【机器学习】bias and variance
- MyEclipse 新建->后面的菜单选项设置
- linux下为java设置正确的时区