#include <iostream>
using namespace std;
int n,G,ic,jc;
void fun (int i,int j,int V[100][100],int r[100][2])
{
if(V[i][j]==0)
{
return;
}
else
{
if(V[i-1][j]>r[i][0]+V[i-1][j-r[i][1]])
{
fun(i-1,j,V,r);
}
else if(V[i-1][j]==r[i][0]+V[i-1][j-r[i][1]])
{
fun(i-1,j,V,r);
cout<<"second prosibility"<<endl;
cout<<i<<endl;
fun(i-1,j-r[i][1],V,r);
}
else
{
cout<<i<<endl;
fun(i-1,j-r[i][1],V,r);
}
}
}
int main()
{
cout<<"cout n and G"<<endl;
cin>>n>>G;
int r[100][2];
int V[100][100];
for(int i=1;i<=n;i++)
{
cout<<"please cout r[i].vi and r[i].wi"<<endl;
cin>>r[i][0]>>r[i][1];
}
for(int i=0;i<=n;i++)//限制的重量为0
V[i][0]=0;
for(int i=0;i<=G;i++)//不选物品
V[0][i]=0;
for(int i=1;i<=n;i++)//对其余可能求动态规划
{
for(int j=1;j<=G;j++)
{
if(r[i][1]>j)//所选的第i个元素的重量大于背包最大限重,故最大只能装i-1个元素
V[i][j]=V[i-1][j];
else
{
if(V[i-1][j]>r[i][0]+V[i-1][j-r[i][1]])//如果选上第j个物品后的总价值小于不加的时候
{
V[i][j]=V[i-1][j];
}
else
{
V[i][j]=r[i][0]+V[i-1][j-r[i][1]];
}
}
ic=i;
jc=j;
}
}
cout << V[n][G] << endl;
fun(n,G,V,r);
return 0;
}