题目描述
给了一个箱子的总体积是V,同时有n件物品,每件的都有一个体积,问怎么去可以让剩余空间最小?
f1-01背包-没有显式给价值 |
基本分析
- 剩余空间最小?占用的体积最大
- 01背包的价值是啥?也是v
代码
#include <iostream>
using namespace std;
const int N = 200010;
int f[N];
int m, n;
int main()
{
scanf("%d%d", &m, &n);
for (int i = 1; i <= n; i++)
{
int v;
scanf("%d", &v);
for (int j = m; j >=v; j-- )
f[j] = max(f[j], f[j-v]+v);
}
printf("%d\n", m - f[m]);
return 0;
}
总结
- 定义dp状态的时候,N是第二个维度(体积)的上限,不是第一个维度