你dp数组意义完全开反了了吧,第一维是第几个,最大就一百,第二维是体积,最大是一千。这种错误重新读题就读出来了的= =
by minamikotori @ 2017-03-31 22:17:16
对啊。同上--
by fy0123 @ 2017-03-31 22:27:13
你的dp是有些乱,给你个参考
```cpp
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
struct tb
{
int x, y;
}s[105];
int dp[105][1005];
int main( )
{
int t, n;
while(scanf("%d%d", &t, &n) != EOF)
{
memset(dp, 0, sizeof(dp));
for(int i = 0; i < n; i++)
scanf("%d%d", &s[i].x, &s[i].y);
for(int i = n - 1; i >= 0; i--)
{
for(int j = 0; j <= t; j++)
{
if(j < s[i].x) dp[i][j] = dp[i+1][j];
else dp[i][j] = max(dp[i+1][j], dp[i+1][j-s[i].x] + s[i].y);
}
}
printf("%d\n", dp[0][t]);
}
return 0;
}
```
by tb2016 @ 2017-04-05 20:50:20
给你个参考,比@[tb2016](/space/show?uid=39182) 好:
```cpp
#include<cstdio>
using namespace std;
int n,c;
int w[1001],v[1001],f[1001];
int max(int x,int y)
{
if(x>y)
return x;
return y;
}
int main()
{
int i,j;
scanf("%d%d",&c,&n);
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&v[i]);
for(i=1;i<=n;i++)
for(j=c;j>=w[i];j--)
f[j]=max(f[j],f[j-w[i]]+v[i]);
printf("%d",f[c]);
return 0;
}
```
by rxzfn @ 2017-04-12 20:19:39
```cpp
#include <bits/stdc++.h>
using namespace std;
const int MAXT=1000+10;
const int MAXN=100+10;
struct med{
int time;
int value;
}a[MAXN];
int t,n;
int dp[MAXN][MAXT];
int main(){
memset(dp,0,sizeof(dp));
cin>>t>>n;
for(int i=1;i<=n;i++){
cin>>a[i].time>>a[i].value;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=t;j++){
if(a[i].time<=t&&j-a[i].time>=0){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i].time]+a[i].value);
}
else{
dp[i][j]=dp[i-1][j];
}
}
}
cout<<dp[n][t]<<endl;
return 0;
}
```
by GHOST_RIDER @ 2017-05-13 20:07:40