#include <iostream> #include<cstring> using namespace std; int dp[1010],dp2[1010]; int v[1010],w[1010]; int main() { int n,V;cin>>n>>V; for(int i = 1;i<=n;i++){ cin>>v[i]>>w[i]; } // for(int i = 1;i<=n;i++){ // for(int j = 1;j<=V;j++){ // if(v[i]>j){ // dp[i][j] = dp[i-1][j]; // } // else{ // dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]); // } // } // } for(int i = 1;i<=n;i++){ for(int j = v[i];j<=V;j++){ dp[j] = max(dp[j],dp[j-v[i]]+w[i]); } } memset(dp2, -0x3f, sizeof dp2); dp2[0] = 0; for(int i = 1;i<=n;i++){ for(int j = v[i];j<=V;j++){ dp2[j] = max(dp2[j],dp2[j-v[i]]+w[i]); } } cout<<dp[V]<<'\n'; if(dp2[V]<0){ cout<<0<<'\n'; } else{ cout<<dp2[V]; } return 0; } // 64 位输出请用 printf("%lld")
不知道为什么二维的过不了,希望大佬指出,使用一维可以过。