p1616 疯狂的采药
#include<iostream> #include<vector> using namespace std; const int Maxn=10000001; int a[Maxn],b[Maxn],dp[Maxn]; int main() { // freopen("p1616_1.in","r",stdin); int t,m,mi=0; cin>>t>>m; for (int i=1;i<=m;i++) { int a1,b1; cin>>a1>>b1; if (a1<=t) { mi++; a[mi]=a1; b[mi]=b1; } } for (int i=1;i<=mi;i++) { for (int j=t;j>=0;j--) { for (int k=0;k<=t/a[i];k++) { if (j>=k*a[i]) dp[j]=max(dp[j],dp[j-k*a[i]]+k*b[i]); else break; } } } cout<<dp[t]<<endl; } /* 70 3 71 100 69 1 1 2 */