背包问题,只不过有了多个背包。
虽然代码简单,但也要看懂。
#include<cstdio>
#include<iostream>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
int f[21][21],T[21];
int main()
{
//freopen("rockers.in","r",stdin);
//freopen("rockers.out","w",stdout);
int n,t,m;
cin>>n>>t>>m;
for(int i=1;i<=n;i++)
cin>>T[i];
for(int i=1;i<=n;i++)
for(int m1=m;m1>=1;m1--)
for(int t1=t;t1>=T[i];t1--)
{
f[m1][t1]=max(f[m1][t1],max(f[m1-1][t]+1,f[m1][t1-T[i]]+1));
}
cout<<f[m][t]<<endl;
return 0;
}

本文介绍了一种多背包问题的解决方法,通过三维动态规划算法实现了物品分配的最大化效益。文章给出了具体的C++实现代码,并详细展示了如何通过多重循环来更新状态转移方程。
729

被折叠的 条评论
为什么被折叠?



