题解:
dp背包
而且要滚动
代码:
#include<bits/stdc++.h> using namespace std; int f[50005],m,n,a[5005]; int main() { scanf("%d%d",&m,&n); for (int i=1;i<=n;i++)scanf("%d",&a[i]); for (int i=1;i<=n;i++) for (int j=m;j>=a[i];j--) f[j]=max(f[j],f[j-a[i]]+a[i]); printf("%d\n",f[m]); }