九度oj采药,01背包变形,虽然一维更省空间,但我用二维数组解决,更易理解,二维搞好了,再搞一维
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[1005][1005];
int main()
{
int i,j,k,m,T,n,v[105],t[105];
while(cin>>T>>m)
{
for(i=0;i<m;i++)
cin>>t[i]>>v[i];
for(i=0;i<=m;i++)
for(j=0;j<=T;j++)
dp[i][j]=0;
for(i=0;i<m;i++)
for(j=0;j<=T;j++)
{
if(j<t[i])dp[i+1][j]=dp[i][j];
else dp[i+1][j]=max(dp[i][j],dp[i][j-t[i]]+v[i]);
}
cout<<dp[m][T]<<endl;
}
return 0;
}