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 }