编辑代码

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 1010;

int f[N][N] , v[N] , w[N];

int n , m;

int main()
{
 scanf("%d%d" , &n , &m );
 
 for(int i = 1 ; i <= n ; i ++ ) //读入每个物品的价值和重量 
  scanf("%d%d" , &v[i] , &w[i] );
 
 //本来要将f[0][0]初始化成0的,但由于是在main函数外面定义,所以直接省略
 
 //利用dp进行解答 
 for( int i = 1 ; i <= n ; i++ )
 {
  for( int j = 1 ; j <= m; j++ )
  {
   f[i][j] = f[i - 1][j];//这是考虑了没加第i个物品的情况 
   if(j >= v[i] )//这是考虑了第i个物品的情况 
    f[i][j] = max( f[i][j] , f[i - 1][j - v[i] ] + w[i] );
  }
 }
 
 int res = 0;
 
 for(int i = 1 ; i <= m ; i++ ) res = max( res , f[n][i] );
 
 cout<< res << endl;
}