有 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 2023-09-14 00:24  ruoye123456  阅读(55)  评论(0)    收藏  举报