代码附注释
include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
int a[200],dp[200][20050];
int main()
{
int v,n,a[1000];
scanf("%d %d",&v,&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
dp[0][0]=0;//前i件商品在j的体积下能装的最大体积,所以第0件商品在体积零的情况下能装的最大体积是0
for(int i=1;i<=n;i++)//从第一件商品开始
{
for(int j=0;j<=v;j++)//从体积0开始
{
if(a[i] > j)//若当前商品体积大于所限制的j体积
{
dp[i][j]=dp[i-1][j];//即赋给当前限制体积下前i-1件物品的数据
}
else//反之
{
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);//不添加该物品 添加该物品 的大小比较
}
}
}
cout << v-dp[n][v];//输出需要v-maxV
return 0;
}