有 n
种物品要放到一个袋子里,袋子的总容量为 m
,每种物品都有 m
个,单个物品的体积都是 1
。对于第 i
种物品,如果我们一共取了 j
(j≥1)
个,会获得 wi,j
的收益。请问如何选择物品,使得在物品的总体积不超过 m
的情况下,获得的总收益最大?请求出最大总收益。
输入格式
第一行两个整数 n,m
。
接下来 n
行,每行 m
个整数 wi,1,…,wi,m
。
输出格式
一行一个整数表示答案。
样例输入
5 5
5 1 1 5 2
2 7 8 2 4
4 1 6 9 1
8 10 10 6 1
8 7 2 8 10
样例输出
28
数据规模
对于所有数据,保证 1≤n,m≤500,1≤wi,j≤1000
三重循环枚举
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int f[N];
int w[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>w[i][j];
for(int i=1;i<=n;++i)
for(int j=m;j;--j)
for(int k=0;k<=j;++k)
f[j]=max(f[j],f[j-k]+w[i][k]);
cout<<f[m]<<'\n';
return 0;
}
posted on
浙公网安备 33010602011771号