先从silver的题开始吧
裸背包
#include <iostream>
#include <cstdio>
#include <bitset>
using namespace std;
bitset<200000> f;
int v,n;
int a[100000];
int main()
{
cin>>v>>n;
f.reset();
f[0]=true;
for (int i=1;i<=n;++i) scanf("%d",&a[i]);
for (int i=1;i<=n;++i)
for (int j=v;j>=a[i];--j)
f[j]=f[j]||f[j-a[i]];
for (int i=v;i>=0;--i) if (f[i]) {cout<<i<<endl;break;}
return 0;
}