裸0/1背包
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 15000; int n , m; int w[MAXN] , v[MAXN] , dp[MAXN]; int main(){ while(scanf("%d%d" , &n , &m) != EOF){ for(int i = 1 ; i <= n ; i++) scanf("%d%d" , &w[i] , &v[i]); int ans = 0; memset(dp , 0 , sizeof(dp)); for(int i = 1 ; i <= n ; i++){ for(int j = m ; j >= w[i] ; j--){ dp[j] = max(dp[j] , dp[j-w[i]]+v[i]); ans = max(ans , dp[j]); } } printf("%d\n" , ans); } return 0; }