重量恰好为T:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
int T,M;
int t[101];
int m[101];
int d[101][1001];
int max;
int main ()
{
while(scanf("%d%d",&T,&M)==2)
{
for(int i=1;i<=M;i++)
cin>>t[i]>>m[i];
memset(d,0,sizeof(d));
for(int i=1;i<=M;i++)
for(int j=0;j<=T;j++)
{
d[i][j]=(i==1?0:d[i-1][j]);
if(i==1&&j>0) d[i][j]=-10000000; //赋为最小值 只能从0开始加
if(j>=t[i]) if(d[i][j]<d[i-1][j-t[i]]+m[i]) d[i][j]=d[i-1][j-t[i]]+m[i];
//if(d[i][j]<d[i][j-1]) d[i][j]=d[i][j-1];
}
cout<<d[M][T]<<endl;
}
system("pause");
return 0;
}