Tyvj P1016 装箱问题 (DP)


背景 Background

太原成成中学第2次模拟赛 第三道

描述 Description

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

输入格式 InputFormat

第一行,一个整数,表示箱子容量;

第二行,一个整数,表示有n个物品;

接下来n行,分别表示这n个物品的各自体积。

输出格式 OutputFormat

一个整数,表示箱子剩余空间。

样例输入 SampleInput [复制数据]

24
6
8
3
12
7
9
7

样例输出 SampleOutput [复制数据]

0

01背包的模板,只是价值和花费相等,滚动数组节省空间。

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long LL;
const int MAX=0x3f3f3f3f;
int v,n,a[50],dp[20005];
int main()
{
    scanf("%d%d",&v,&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]);
    return 0;
}



Tyvj P1016 装箱问题 (DP)

时间: 2024-11-01 19:51:50

Tyvj P1016 装箱问题 (DP)的相关文章

tyvj p1016 装箱问题

装箱问题From admin 描述 Description 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30), 每个物品有一个体积 (正整数). 要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 InputFormat第一行,一个整数,表示箱子容量:第二行,一个整数,表示有n个物品:接下来n行,分别表示这n个物品的各自体积.输出格式 OutputFormat一个整数,表示箱子剩余空间. 简单DP 01背包 #include<stdio.

TYVJ P1016 装箱问题 Label:01背包 DP

做题记录:2016-08-15 23:07:04 背景 太原成成中学第2次模拟赛 第三道 描述 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数).要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 第一行,一个整数,表示箱子容量: 第二行,一个整数,表示有n个物品: 接下来n行,分别表示这n个物品的各自体积. 输出格式 一个整数,表示箱子剩余空间. 测试样例1 输入 24 6 8 3 12 7 9 7 输出

JustOj 2009: P1016 (dp)

题目描述 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积  (正整数).要求从  n  个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入 第一行,一个整数,表示箱子容量:  第二行,一个整数,表示有n个物品:  接下来n行,分别表示这n个物品的各自体积. 输出 一个整数,表示箱子剩余空间. 样例输入 24 6 8 3 12 7 9 7 样例输出 0 题解:背包问题 1 #include <iostream> 2 #include

【dp】装箱问题

装箱问题                         (pack.pas/c/cpp) 来源:NOIP2001(普及组) 第四题 [问题描述] 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30=,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. [输入文件] 第一 行一个正整数V表示箱子的容量,第二行一个正整数N表示物品个数,接下来N行列出这N个物品各自的体积. [输出文件] 单独一行,表示箱子最小

tyvj P1519 博彩游戏(AC自动机+DP滚动数组)

P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否则不中.Bob会告诉你这M个序列,和身上有的钱的总数N,当然还有R的范围.请你告诉Bob中奖的概率有多少? 输入格式 第一行三个用空格隔开的数N.M和R的范围R.其中1<=R<=9,0<N<=60,0<M<=20000.下面M行每行一个字符串(长度小于

tyvj 1342 教主泡嫦娥 环上DP

342 教主泡嫦娥 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 2012年12月21日下午3点14分35秒,全世界各国的总统以及领导人都已经汇聚在中国的方舟上.但也有很多百姓平民想搭乘方舟,毕竟他们不想就这么离开世界,所以他们决定要么登上方舟,要么毁掉方舟. LHX教主听说了这件事之后,果断扔掉了手中的船票.在地球即将毁灭的那一霎那,教主自制了一个小型火箭,奔向了月球…… 教主登上月球之后才发现,他的女朋友忘记带到月球了,为此他哭了一个月.但细心的教

tyvj 1056 能量项链 区间dp (很神)

P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量.如果

tyvj 1005 采药 0-1背包 优化的一位数组 dp 代码1

#include <iostream> #include <string.h> using namespace std; int dp[1005], w[105],v[105],T,M; int max(int x,int y) {    return x>y?x:y;   } void  f( ) {   int i,j; for (i=1; i<=M; i++) for (j=T;j>=0; j--) if (j>=w[i]) dp[j]=max(dp[

tyvj 1005 采药 0-1背包 优化的一位数组 dp 代码2

#include <iostream>#include <string.h>using namespace std;int dp[1005], w[105],v[105],T,M;int max(int x,int y){    return x>y?x:y;   }void  f( ){   int i,j;    for (i=1; i<=M; i++)        for (j=T;j>=w[i]; j--)          dp[j]=max(dp[j