HDU 1059 Dividing
2012-08-31 10:20
260 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1059
很弱....时间是750ms....
View Code
很弱....时间是750ms....
View Code
#include <iostream> #define n 7 #define maxn 125005 using namespace std; int main() { long t=0, i, j, l, sum, ans[maxn], v , num , m; while(1) { t++; sum = 0; for(i = 1; i < n; i++) { cin >> num[i]; v[i] = i; sum += v[i]*num[i]; } if(sum == 0) break; m = sum/2; for(i = 0; i <= m; i++) ans[i] = 0; for(i = 1; i < n; i++) { if(v[i]*num[i] >= m ) { for(j = 0; j <= m; j++) if(j >= v[i] && ans[j-v[i]]+v[i] > ans[j]) ans[j] = ans[j-v[i]]+v[i]; } else { for(j = 1; j < num[i];) { for(l = m; l >= j*v[i]; l--) if(ans[l-j*v[i]]+j*v[i] > ans[l]) ans[l] = ans[l-j*v[i]]+j*v[i]; num[i] -= j; j = j * 2; } for(l = m; l >= num[i]*v[i]; l--) if(ans[l-num[i]*v[i]]+num[i]*v[i] > ans[l]) ans[l] = ans[l-num[i]*v[i]]+num[i]*v[i]; } } cout << "Collection #" << t << ":" << endl; if(ans[m]*2 == sum && m*2 == sum ) cout << "Can be divided." << endl; else cout << "Can't be divided." << endl; cout << endl; } return 0; }
相关文章推荐
- hdu 1059 Dividing(优化的多重背包 可达可不达)
- hdu 1059 Dividing DP,多重背包 测试数据很水
- hdu 1059&&POJ 1014 Dividing
- HDU 1059 Dividing(多重背包)
- hdu-1059-多重背包-Dividing
- hdu - 1059 Dividing
- hdu1059 Dividing 【多重背包】
- hdu 1059 Dividing (多重背包详解)
- hdu_1003_Max Sum hdu_1058_Humble Numbers hdu_1059_Dividing
- hdu 1059 Dividing(多重背包)
- HDU 1059- Dividing
- Dividing (hdu 1059 多重背包)
- hdu1059 Dividing (多重背包) 经典
- hdu 1059 Dividing
- HDU 1059 Dividing
- HDU1059 && POJ1014 :Dividing(多重背包)
- HDU 1059 Dividing 多重背包
- poj1014 hdu1059 Dividing 多重背包
- HDU_1059 Dividing 【多重背包】
- hdu 1059 Dividing