P2925 [USACO08DEC]干草出售Hay For Sale
简化版01背包(连价值都免了)
直接逆推解决
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>
#define re register
using namespace std;
void read(int &x){
char c=getchar();x=;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
}
int n,m,f[],a;
int main(){
read(n);read(m); f[]=;
for(re int i=,j;i<=m;++i){
read(a);
for(j=n;j>=a;--j) f[j]|=f[j-a];//在这里相当于f[j]=f[j-a]?1:0;
}
for(re int i=n;i>=;--i)//找一遍最大的
if(f[i]){printf("%d",i);return ;}
}