#include <stdio.h> #include <string.h> int max(int a, int b) { if (a >= b ) { return a; } return b; } int main() { int V, n; scanf("%d%d", &V, &n); int dp[n + 1][V + 1]; //初始化 memset(dp, 0, sizeof(dp)); int v[n]; for (int i = 0; i < n; i++) { scanf("%d", &v[i]); } for (int i = 1; i <= n ; i++) {//第i个箱子 for (int j = 1; j <= V; j++) {//分配的体积大小 //选择箱子或者不选择 if (j - v[i - 1] < 0) dp[i][j] = dp[i - 1][j]; else { //选择箱子后计算占用的空间 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i - 1]] + v[i - 1]); } } } printf("%d", V - dp[n][V]); return 0; }