​传送门​

P1049 [NOIP2001 普及组] 装箱问题_c++

思路:

转化为01背包问题。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
int a[50];
int dp[20010];

int main()
{
int v;
cin>>v;
int n;
cin>>n;
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
for(int i = 1; i <= n; i++)
{
for(int j = v; j >= a[i]; j--)
{
dp[j] = max(dp[j],dp[j-a[i]]+a[i]);
}
}
printf("%d\n",v-dp[v]);
}