| ||||||||||
| 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 | |||||||||
Re:我用背包问题9讲上的多重背包的伪代码写的,怎么一直过不了,各位大牛看看,谢谢!In Reply To:我用背包问题9讲上的多重背包的伪代码写的,怎么一直过不了,各位大牛看看,谢谢! Posted by:shangmin at 2009-06-19 14:25:05 amount -= t[k];这里
k++;
> 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