典型的“01背包”。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; int N,M,t,v; int f[1000+2]; int main(){ scanf("%d %d",&N,&M); for(int i=1;i<=M;++i){ scanf("%d %d",&t,&v); for(int j=N;j>=1;--j){ if(j<t)f[j]=f[j]; else f[j]=((f[j]>f[j-t]+v)?f[j]:(f[j-t]+v)); } } printf("%d\n",f[N]); return 0; }