| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我用背包问题9讲上的多重背包的伪代码写的,怎么一直过不了,各位大牛看看,谢谢!vector<int> dp(100002); class node { public: int count; //每个币种的数目 int num; //面值 }Nodes[1001]; int t[11] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; int main() { int cashes, m; while(cin >> cashes >> m) { fill(dp.begin(), dp.begin() + cashes + 2, 0); for(int i = 1; i <= m; i++) { cin >> Nodes[i].count >> Nodes[i].num; } for(int i = 1; i <= m; i++) { if(Nodes[i].count * Nodes[i].num >= cashes) { for(int j = Nodes[i].num; j <= cashes; j++) { dp[j] = max(dp[j], dp[j - Nodes[i].num] + Nodes[i].num); } } else { int k = 0; int amount = Nodes[i].count; while(t[k] < amount) { for(int j = cashes; j >= t[k] * Nodes[i].num; j--) { dp[j] = max(dp[j], dp[j - t[k] * Nodes[i].num] + t[k] * Nodes[i].num); } amount -= t[k]; k++; } for(int j = cashes; j >= Nodes[i].count * Nodes[i].num; j--) { dp[j] = max(dp[j], dp[j - Nodes[i].count * Nodes[i].num] + Nodes[i].count * Nodes[i].num); } } } cout << dp[cashes] << endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator