状态转移方程: 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;
}