状态转移方程: f[j]=max(f[j-a[i]]+a[i],f[j])f[j]=max(f[j?a[i]]+a[i],f[j])
答案在 f[v]f[v] 的位置
//My AC Code:
#include <cstdio>
#include <algorithm>
using namespace std;
int h,m,hm[46000],mm[46000];
int max(int a,int b){return a>b?a:b;}
int main(){
scanf("%d%d",&h,&m);
for(int i=1;i<=m;i++)scanf("%d",&mm[i]);
for(int i=1;i<=m;i++){
for(int j=h;j>=mm[i];j--){
hm[j]=max(hm[j],hm[j-mm[i]]+mm[i]);
}
}
printf("%d",hm[h]);
return 0;
}