您的位置:首页 > 其它

洛谷P1049 装箱问题(01背包小变形)

2018-04-03 16:18 288 查看

题目描述

有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

输入输出格式

输入格式:
一个整数,表示箱子容量一个整数,表示有n个物品接下来n行,分别表示这n 个物品的各自体积输出格式:
一个整数,表示箱子剩余空间。

输入输出样例

输入样例#1: 复制
24
6
8
3
12
7
9
7
输出样例#1: 复制
0

说明

NOIp2001普及组 第4题

先求每个背包的最大可以放入的重量,此题中重量和价值是等价的f【j】=max(dp【j】,dp【j-w【i】】+w【i】)然后答案是T-dp【T】#include<stdio.h>
#include<iostream>
#include<algorithm>

using namespace std;

int V;
int n;
int w[31];
int dp[20002];
int main()
{
//freopen("1.txt", "r", stdin);
cin >> V >> n;
for (int i = 1; i <= n; i++)
cin >> w[i];

for (int i = 1; i <= n;i++)
for (int j = V; j >= w[i]; j--)
dp[j] = max(dp[j], dp[j - w[i]] + w[i]);
cout << V - dp[V];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: