【动态规划】【零一背包】CODEVS 1014 装箱问题 2001年NOIP全国联赛普及组

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,m,w[31],f[30001];
 5 int main()
 6 {
 7     scanf("%d%d",&m,&n);
 8     for(int i=1;i<=n;i++) scanf("%d",&w[i]);
 9     for(int i=1;i<=n;i++)
10       for(int v=m;v>=w[i];v--)
11         f[v]=max(f[v-w[i]]+w[i],f[v]);
12     printf("%d\n",m-f[m]);
13     return 0;
14 }
时间: 2024-10-21 11:20:29

【动态规划】【零一背包】CODEVS 1014 装箱问题 2001年NOIP全国联赛普及组的相关文章

codevs 1014 装箱问题 2001年NOIP全国联赛普及组

题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 Input Description 一个整数v,表示箱子容量 一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 Output Description 一个整数,表示箱子剩余空间. 样例输入 Sample Input 24 6

codevs 1102 采药 2005年NOIP全国联赛普及组

1102 采药 2005年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB gold 题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到

【动态规划】【记忆化搜索】CODEVS 1011 数的计算 2001年NOIP全国联赛普及组

设答案为f(n),我们显然可以暴力地递归求解: f(n)=f(1)+f(2)+……+f(n/2). 但是n=1000,显然会超时. 考虑状态最多可能会有n种,经过大量的重复计算,所以可以记忆下来,减少不必要的计算. 1 #include<cstdio> 2 using namespace std; 3 int n; 4 long long memory[1001]; 5 long long f(int cur) 6 { 7 if(memory[cur]) return memory[cur];

codevs 1013 求先序排列 2001年NOIP全国联赛普及组 x

题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input Description 两个字符串,分别是中序和后序(每行一个) 输出描述 Output Description 一个字符串,先序 样例输入 Sample Input BADC BDCA 样例输出 Sample Output ABCD 数据范围及提示 Data Size & Hint 分类标签 Tags 点此展开 #include<

【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

对于一对数(p,q),若它们的gcd为x0,lcm为y0, 则:p*q/x0=y0,即q=x0*y0/p, 由于p.q是正整数,所以p.q都必须是x0*y0的约数. 所以O(sqrt(x0*y0))地枚举约数,依次用gcd判断. 1 #include<cstdio> 2 #include<cmath> 3 using namespace std; 4 typedef long long LL; 5 LL limit,Q,P,To; 6 int ans; 7 LL gcd(LL a,

棋盘型动态规划 之 CODE[VS] 1010 过河卒 2002年NOIP全国联赛普及组

/* dp[i][j] := 从起点[0][0]到坐标为[i][j]的位置,路径的条数. 卒行走规则:可以向下.或者向右,故 dp[i][j] = dp[i-1][j] + dp[i][j-1] (向下)      (向右) 注意: 去掉对方马的控制点 附: codevs测试数据有些弱,可以考虑到这里评测一下:清橙 (主要区别在于,dp[][]数据类型设为long long) */ 1 #include <iostream> 2 #include <cstdlib> 3 #incl

codevs 1086 栈 2003年NOIP全国联赛普及组

题目描述 Description 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何一门数据结构的课程都会介绍栈.宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙 宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n(图示为1到3的情况),栈A的深度大于n. 现在可以进行两种操作, 1.将一个数,从操

1010 过河卒 2002年NOIP全国联赛普及组codevs

1010 过河卒  2002年NOIP全国联赛普及组codevs 题目描述 Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如上图 C 点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20 的整数,并由键盘输入),同样马

划分型动态规划 之 CODE[VS] 1040 统计单词个数 2001年NOIP全国联赛提高组

/* dp[i][k] := 前i+1个字符组成的字符串,划分为k份,每份中包含的单词个数加起来总数的最大值. 初始化: dp[][] = -0x3f3f3f3f   // 注意:对于dp[i][k],若(i+1)<k,则dp[i][k]的值不存在,设为-0x3f3f3f3f.例如:dp[0][2] = -0x3f3f3f3f  dp[i][1] = val[0][i]   //注:val[i][j] := 截取原字符串[从i到j的字符(包含i和j位置的字符)]组成字符串,返回其包含的单词个数