bzoj1606

题解:

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
",f[m]);  
}
原文地址:https://www.cnblogs.com/xuanyiming/p/8461668.html