1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <algorithm>//庆祝自己第一道01背包问题hhhhhh
5 #include <string.h>
6 using namespace std;
7 int time[110];
8 int value[110];
9 int tab[1100][1100];//此处吐槽一下。。数组开小居然会wa而不是re。。。。。
10 int T,M,i,j;
11 int main()
12 {
13 while(scanf("%d%d",&T,&M)!=EOF)
14 {
15 for(i=1;i<=M;i++)
16 {
17 scanf("%d%d",&time[i],&value[i]);
18 }
19 memset(tab,0,sizeof(tab));//memset
20 for(i=1;i<=M;i++)//member
21 {
22 for(j=1;j<=T;j++)//time
23 {
24 if(j<time[i])//如果空间盛放不下
25 {
26 tab[i][j]=tab[i-1][j];
27 }
28 else
29 {
30 tab[i][j]=max(tab[i-1][j],tab[i-1][j-time[i]]+value[i]);
31 }//从放进去或者是不放进去选择价值最大的情况
32 }
33 }
34 cout<<tab[M][T]<<'\n';
35 }
36 return 0;
37 }
…… |
time=0 |
time=1 |
time=2 |
…… |
第四个包 |
|
|
|
|
第三个包 |
|
|
|
|
第二个包 |
|
|
|
|
第一个包 |
|
|
|
|