求求你点点赞吧!拜托![](https://i-blog.csdnimg.cn/direct/dbe1058edb4b4885ad77e6518c6735f2.png)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int v,n,t;//背包容量,物品数量,最大组号
cin>>v>>n>>t;
int w[31];//物品重量
int c[31];//物品价值
int p;//组号
int a[11][31]={0};
int f[11][201]={0};
for(int i=1;i<=n;i++)
{
cin>>w[i]>>c[i]>>p;
a[p][0]+=1;//第p组有多少物品
int q=a[p][0];
a[p][q]=i;
}
//计算获得的最大价值
for(int p=1;p<=t;p++) //阶段:第几组
{
for(int j=1;j<=v;j++)//背包容量
{
f[p][j]=f[p-1][j];//每个格子初始化
for(int i=1;i<=a[p][0];i++)
{
int x=a[p][i];//物品数量w数组,物品价值c数组中的索引
if(w[x]<=j)//能装得下
f[p][j]=max(f[p][j], c[x]+f[p-1][j- w[x]]);
}
}
}
cout<<f[p][v]<<endl;
return 0;
}
标准答案如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int v,n,t;//背包容量,物品数量,最大组号
cin>>v>>n>>t;
int w[31];//物品重量
int c[31];//物品价值
int p;//组号
int a[11][31]={0};
int f[201]={0};
for(int i=1;i<=n;i++)
{
cin>>w[i]>>c[i]>>p;
a[p][0]+=1;//第p组有多少物品
int q=a[p][0];
a[p][q]=i;
}
//计算获得的最大价值
for(int p=1;p<=t;p++) //阶段:第几组
{
for(int j=v;j>=1;j--)//背包容量
{
for(int i=1;i<=a[p][0];i++)
{
int x=a[p][i];//物品数量w数组,物品价值c数组中的索引
if(w[x]<=j)//能装得下
f[j]=max(f[j], c[x]+f[j- w[x]]);
}
}
}
cout<<f[v]<<endl;
return 0;
}