以洛谷P1048为例。本题较简单,还有一种压缩需要从后往前计算,遇到时补充。
#include<bits/stdc++.h>
using namespace std;int T,M;int f[2][1001];int t[101];int v[101];
void bp()
{for(int i=1;i<=M;i++)for(int j=1;j<=T;j++){if(j-t[i]>=0)f[i%2][j]=f[(i-1)%2][j]>f[(i-1)%2][j-t[i]]+v[i]?f[(i-1)%2][j]:f[(i-1)%2][j-t[i]]+v[i];elsef[i%2][j]=f[(i-1)%2][j];}cout<<f[M%2][T];
}
int main()
{cin>>T>>M;for(int i=1;i<=M;i++)cin>>t[i]>>v[i];bp();return 0;
}