70 3
71 100
69 1
1 2
3
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int f[1005],t,n,a[105],b[105],ans=0; //f[j]表示只考虑前i种草药,用j的时间能采到的最大总价值,然后第i个草药的时间为ai,价值为bi,推出方程。 //dp 01背包 int main() { cin>>t>>n; for(int i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]); f[0]=0; for(int i=1;i<=n;i++) { for(int j=t;j>=a[i];j--) { f[j]=max(f[j],f[j-a[i]]+b[i]); } } for(int i=0;i<=t;i++)ans=max(ans,f[i]); cout<<ans<<endl; return 0; }
原文:http://www.cnblogs.com/gc812/p/5789584.html