代码附注释

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;	
}