1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 //01背包二维正写写法 7 int p[107],w[107],dp[107][1007]; 8 int main() 9 { 10 int N,T; 11 scanf("%d%d",&N,&T); 12 for(int i=1;i<=N;i++) 13 { 14 scanf("%d%d",&p[i],&w[i]); 15 } 16 memset(dp,0,sizeof(dp)); 17 for(int i=1;i<=N;i++) 18 { 19 for(int j=0;j<=T;j++) 20 { 21 if(j>=w[i]) 22 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]); 23 else 24 dp[i][j] = dp[i-1][j]; 25 } 26 } 27 printf("%d",dp[N][T]); 28 } 29 30 //01背包二维逆写写法 31 int p[107],w[107],dp[107][1007]; 32 int main() 33 { 34 int N,T; 35 scanf("%d%d",&N,&T); 36 for(int i=1;i<=N;i++) 37 { 38 scanf("%d%d",&p[i],&w[i]); 39 } 40 memset(dp,0,sizeof(dp)); 41 for(int i=1;i<=N;i++) 42 { 43 for(int j=T;j>=0;j--) 44 { 45 if(j>=w[i]) 46 dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]); 47 else 48 dp[i][j] = dp[i-1][j]; 49 } 50 } 51 printf("%d",dp[N][T]); 52 } 53 54 //01背包1维写法,只能逆写 55 int p[107],w[107],dp[1007]; 56 int main() 57 { 58 int N,T; 59 scanf("%d%d",&N,&T); 60 for(int i=1;i<=N;i++) 61 scanf("%d%d",&p[i],&w[i]); 62 memset(dp,0,sizeof(dp)); 63 for(int i=1;i<=N;i++) 64 for(int j=T;j>=w[i];j--) 65 dp[j] = max(dp[j],dp[j-w[i]]+p[i]); 66 printf("%d",dp[T]); 67 }