题目链接:http://poj.org/problem?id=3624
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std ;
int n, m ;
int w[4000], d[4000] ;
int dp[20000] ;
int max(int a, int b){
if(a>b) return a ;
else return b ;
}
int main(){
//fstream cin("x.in") ;
cin >> n >> m ;
memset(dp, 0, sizeof(dp)) ;
for(int i=0; i<n; i++)
cin >> w[i] >> d[i] ;
for(int i=0; i<n; i++)
for(int j=m; j>=w[i]; j--)
dp[j] = max(dp[j], dp[j-w[i]] + d[i]) ;
cout << dp[m] << endl ;
return 0 ;
}
#include<fstream>
#include<cstring>
using namespace std ;
int n, m ;
int w[4000], d[4000] ;
int dp[20000] ;
int max(int a, int b){
if(a>b) return a ;
else return b ;
}
int main(){
//fstream cin("x.in") ;
cin >> n >> m ;
memset(dp, 0, sizeof(dp)) ;
for(int i=0; i<n; i++)
cin >> w[i] >> d[i] ;
for(int i=0; i<n; i++)
for(int j=m; j>=w[i]; j--)
dp[j] = max(dp[j], dp[j-w[i]] + d[i]) ;
cout << dp[m] << endl ;
return 0 ;
}