摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=2577用动态规划角。on[i]表示在lock为开的时候输入第i个字符时的最小按键次数。off[i]表示在lock为关的时候输入第i个字符时的最小按键次数。View Code #include "iostream"#include "string"using namespace std;#define MAX 105int on[MAX], off[MAX];int main(){ int n; string str; cin>>n; while(n--
阅读全文
摘要:题目:http://acm.swust.edu.cn/oj/problem/324/View Code //1.动态范围//2.动态次数//3.动态规律//4.动态边界#include <stdio.h>#include<string.h>int main(){ int Live, Stand, Step; int f[101][2]; while(scanf("%d%d%d", &Live, &Step, &Stand)!=EOF){ memset(f, 0, sizeof(f)); f[Stand][0] = 1; int
阅读全文
摘要:滚动数组的作用在于优化空间,主要用在递推和动态规划中。因为dp题目是一个自底向上扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。滚动数组实际是一种节省空间的办法,时间上没啥优势,多用于dp.其实用一维的数组来进行的简单背包就是用了滚动数组啊。
阅读全文
摘要:先说一下多重背包问题。他是由完全背包而来的,但是不同的是,他的每件物品有一定的数量限量,而完全背包中每种物品可以有无限件。HDU 2660http://acm.hdu.edu.cn/showproblem.php?pid=2660题目大意:在N件物品中,最多可以选择K,在选择的K件物品中,总容量不能超过W.求选择的最大价值。本题就是一个任意组合问题了,当然除了这种解法以外还有一种解法。那就是DFS了。View Code #include<iostream>#include<cstdio>#include<cstring>#include<string&
阅读全文
摘要:POJ 2392http://poj.org/problem?id=2392题意:有一群牛要上太空,他们计划建一个太空梯(用一些石头垒), 他们有k种不同类型的石头,每一种石头的高度为h,数量为c,由于会受到太空辐射, 每一种石头不能超过这种石头的最大建造高度a,求解利用这些石头所能修建的太空梯的最高的高度.解析:多重背包问题,与一般的多重背包问题所不同的知识多了一个限制条件 就是某些"物品"叠加起来的"高度"不能超过一个值,于是我们可以对他们的最高可能达到高度进行排序, 然后就是一般的多重背包问题了.View Code #include <ios
阅读全文
摘要:POJ 1014 http://poj.org/problem?id=1014题意是这样的:有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两份的总价值相等,其中一个物品不能切开,只能分给其中的某一方,当输入六个0是(即没有物品了),这程序结束,总物品的总个数不超过20000Sample Input1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0 Sample OutputCollection #1:Can't be divided.Collection #2:Can be divided.下面一
阅读全文
摘要:POJ 1384http://poj.org/problem?id=1384题意:用猪仔钱罐存钱会有一个严重的问题:不能随时知道里面到底有多少钱。但是,我们可以通过称量其重量,来估计一下里面的钱。现假定钱罐里的都是硬币,已知空罐的重量与现在的重量,同时,给定钱罐里可能会有的硬币的面额与重量。问钱罐中至少有多少钱。思路:从钱罐重量差可知硬币的总重量。每种硬币的数量不确定,估计时可当作有可能有无限个,由此可得完全背包模型。求的是能否组合成该重量,组合以后的最小价值。Sample Input310 11021 130 5010 11021 150 301 6210 320 4Sample Outpu
阅读全文
摘要:完全背包问题的描述:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。例子如下:30 4100 6250 12120 1035 2解释一下上面的数据:30是背包的容量100 是第一件物品的价值,6是第一件物品的重量。往下类推……View Code #include "iostream"#include "string.h"using namespace std;#define size 10005int f[size];int m
阅读全文
摘要:下面来看一个简单的01背包。题目:http://acm.swust.edu.cn/oj/problem/32/View Code #include "stdio.h"#include "string.h"#define size 1000int f[size];int max(int a, int b){ return a>b?a:b;}int main(){ int t, n; while(scanf("%d%d", &t, &n)==2) { int flag = 0, cw, i, v; memset(f,
阅读全文
摘要:本题是一道相当典型的动态规划题目,值得一看。题目:http://acm.swust.edu.cn/oj/problem/0251/我们用dp[i]线性数组来表示邮票的个数,dp[i]中的i就表示达到的面值了。也就是说当达到面值i的时候要用到dp[i]张邮票。当然,i要从1开始,这样就有了dp[1],这个过程是为了dp[2]做的铺垫,可以说这就是动态规划的精髓了。View Code #include "iostream"using namespace std;#define INF 0x7ffffff #define size 2000001int dp[size];int
阅读全文
摘要:DescriptionConsider the number triangle shown below. Write a program that calculates the highest sumof numbers that can be passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. 7 3...
阅读全文
摘要:DescriptionBessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weightWi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (
阅读全文
摘要:描述 打败万恶的ghost以后,将军准备回寝室告诉大伙儿这个消息,没想到杯具又发生了… 你知道有种鬼叫路鬼吗?让人莫名其妙的迷路,将军就被这种鬼上身了。将军本来要上楼梯的,但是因为鬼上身,他要不就上一层楼,要不就下一层楼,这个是随机的,他不能控制自己啦! 假设将军住在第M楼,因为体力原因,将军只能上或者下N次楼,刚开始将军在K楼,假设东6宿舍共有100层。现在问当体力消耗完的时候,将军刚好回到寝室那一层有多少种可能。 例如:将军住在5楼,将军的能上/下5次楼,现在在1楼, 那么将军将回不到寝室啦,为什么?我也不知道。 输入有多组测试数据,每组测试数据共一行,为M,N,K(0 < N &l
阅读全文