AcWing 12. 背包问题求具体方案
原题链接
中等
作者:
术
,
2021-04-25 21:03:25
,
所有人可见
,
阅读 349
#include <iostream>
using namespace std;
const int N=1005;
int w[N],v[N];
int n,V;
int f[N][N];
int main()
{
cin>>n>>V;
f[0][0]=0;
for(int i=1; i<=n; i++)
cin>>v[i]>>w[i];
//从大到小
for(int i=n; i>=0; i--)
{
for(int j=1; j<=V; j++)
{
//i+1
f[i][j]=f[i+1][j];
if(j>=v[i])
f[i][j]=max(f[i][j],f[i+1][j-v[i]]+w[i]);
}
}
//f[1][V]
//cout<<f[1][V];
int i=1,j=V;
for(int i=1,j=V; i<=n; i++)
if(j>=v[i]&&f[i+1][j-v[i]]+w[i]==f[i][j])//若相等,则说明含i
{
cout<<i<<" ";
j-=v[i];
}
//cout << "Hello world!" << endl;
return 0;
}