[wikioi]装箱问题】的更多相关文章

http://wikioi.com/problem/1014/ 01背包问题是最经典的动态规划之一,这道题目甚至是这其中还简单的一种,因为价值就是本身的重量了.本来比如,w是总重量限制,v[]是每个的价值. 但一开始我都有点忘了,查找了一下又勾起了回忆.1.它把总重量从1到w作为状态,对初学者并不是很直观的.但DP本来就是空间换时间的算法,里面经常以整数做状态,数目还既不是太大又不是太小.最终经常是n^2或n^3的复杂度.2.01背包问题是个二维数组的DP,状态转移方程式f[i,v]=max(f…
来源:http://wikioi.com/problem/1014/ 1014 装箱问题 29人推荐 收藏 发题解 提交代码 报错 题目描写叙述 输入描写叙述 输出描写叙述 例子输入 例子输出 提示 题目描写叙述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同一时候有n个物品(0<n<=30),每一个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描写叙述 Input Description 一个整数v…
题目链接 算法:动态规划(01背包) 01背包思想:依次对待某一物体,考虑是否放入容量为V的背包中 用f[V]来表示容量为V的背包的最大价值,则决策是 f[V] = max{f[V], f[V-v[i]]+w[i]} (0 <= i <= n, V-v[i] >= 0) 解释:每一个物体i,只有两种选择,是否放入(放入后一定体积要等于容量V)容量为V的背包中,如果放入的话,那么就要比较现在容量为V的背包不放入i物体 与放入i物体到容量为V-v[i]的背包(价值即为f[V-v[i]]+w[…
题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 Input Description 一个整数v,表示箱子容量 一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 Output Description 一个整数,表示箱子剩余空间. 样例输入 Sample Input 24 6…
题目链接 算法:最短路(数据弱,Floyd也能过) 惨痛的教训:此题我至少提交了20次,原因在于= =太草率和粗心了,看到那个多少组数据以为是城市的数量,导致数组开得小小的= =.(对不起,wikioi的评测机= =).一直报运行错误..我居然一直没查到是越界= =TAT 记住:一定要看清数据范围啊啊啊啊啊!!!!! 此题最恶心的是处理第四个节点,刚开始我不知道怎么算第四个点(本人蒟蒻),以为单纯的x4=x1+x2-x3就可以过...可是不行.后面是看了题解的,应该是直角边终点x1,y1和x2,…
题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串this中可包含this和is,选用this之…
题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f[i-1][j][k]*g[j][k]+Σf[i-1][t][j]*g[t][j] 其中j-k,t-j都是图中的边,前面一项表示第I秒呆在原地,后面一项表示往下走 g[i][j]表示从i点走到j点后,从j点到其他每条路的概率(即1/j连通的点的个数(若j->i有一条边那么要减掉1,因为不能往回走))…
题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定要在子节点的前面) 分析: 首先如果没有父节点和子节点,那么这题就是一道弱弱的排序题,根据排序不等式,策略就是p越大的就放越前面 虽然此题有了这样的限制,但是肯定也希望P越大的在前面越好,那么对于一个点它能放的最大的在哪里呢?当然是紧接在它父节点的位置后面!!!! 于是我们可以先把每个点的权值加入优…
题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先如果不是无向图,是树那就是水水的树链剖分了,但这题是无向图还有环……但这里可以求一遍最小生成树就行了…… 下面简单说明一下正确性: 假设我们已经得到了最小生成树,那么只要证明对询问的(x,y)最优路径都在这颗树上就行了. 我们假设一条不在生成树里的边连接着(a,b),权值为w,则w一定大于生成树上(…
题目链接 算法:辗转相除(欧几里得) gcd(a, b)是a和b最小公倍数, lcm(a, b)是a和b的最大公倍数 gcd(a, b) == gcd(b, a%b) 时间复杂度: O(lgb) 具体证明很多的,百度即可. 代码: int gcd(int a, int b){return (b?gcd(b, a%b):a);} (非递归版自己推) lcm(a, b) = a*b/gcd(a, b) 这里要注意个细节优化,在程序中应该防止溢出,即要写成 lcm(a, b) = a/gcd(a, b…