2012年8月31日

The Most Important Algorithms

摘要: After a long discussion with some of my RISC colleagues about what the 5 most important algorithms on the world are, we couldn't reach a consensus on this question. So I suggested to perform a little survey. The criterion for suggestions was that these algorithms should be widely used. Further w 阅读全文

posted @ 2012-08-31 23:29 acoderworld 阅读(35) 评论(0) 推荐(0)

2012年8月26日

【转】ACM中国国家集训队论文集目录(1999-2009)

摘要: 国家集训队1999论文集陈宏:《数据结构的选择与算法效率——从IOI98试题PICTURE谈起》来煜坤:《把握本质,灵活运用——动态规划的深入探讨》齐鑫:《搜索方法中的剪枝优化》邵铮:《数学模型的建立、比较和应用》石润婷:《隐蔽化、多维化、开放化——论当今信息学竞赛中数学建模的灵活性》杨帆:《准确性、全面性、美观性——测试数据设计中的三要素》周咏基:《论随机化算法的原理与设计》国家集训队2000论文集陈彧:《信息学竞赛中的思维方法》方奇:《动态规划》高寒蕊:《递推关系的建立及在信息学竞赛中的应用》郭一:《数学模型及其在信息学竞赛中的应用》江鹏:《探索构造法解题模式》李刚:《动态规划的深入讨论》 阅读全文

posted @ 2012-08-26 11:21 acoderworld 阅读(122) 评论(0) 推荐(1)

2012年8月19日

HDU 3033

摘要: 这题属于神奇的分组背包问题,思路是:先按brand排序 然后用两个状态转移方程对同品牌和不同品牌稍作区别即可;代码:View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 struct node{ 6 int b,p,v; 7 }a[1010]; 8 int max(int a,int b) 9 {10 return a>b?a:b;11 }12 bool cmp(node a,node b)13 {14 return 阅读全文

posted @ 2012-08-19 10:32 acoderworld 阅读(58) 评论(0) 推荐(0)

2012年8月17日

HDU 2955

摘要: 题目大意:有一个小偷要偷银行的钱,可是他偷没家银行总是有一定的概率被抓,现在给了你一个概率P,只要他被抓的概率乘积不大与P,他就是安全的。问你在他安全的情况下,他最多可以偷多少钱。思路:做这道题时,错误的认为题目所给的浮点型的数据都是精确到小数点后两位,然后把概率放大100倍,转换成为熟悉的01背包。。faint。。经测试题目的数据可能达到0.00001,甚至比0.00001还小,,所以必须转换思路。于是转成以所有银行的总资产为背包容量sum。。求最大的逃跑概率。。注意:题目给我们的是被抓的概率,,而我们要求最大的逃跑率,需要去被抓的概率wi的补 ,即1-wi只有逃跑率才会等于各个逃跑率之积, 阅读全文

posted @ 2012-08-17 20:36 acoderworld 阅读(65) 评论(0) 推荐(0)

2012年8月16日

01背包、完全背包、多重背包、混合三种背包问题

摘要: P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那 阅读全文

posted @ 2012-08-16 21:19 acoderworld 阅读(75) 评论(0) 推荐(0)

【转】《背包九讲》--讲解

摘要: P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的背包中”这个子问题,若 阅读全文

posted @ 2012-08-16 21:16 acoderworld 阅读(59) 评论(0) 推荐(0)

2012年8月15日

HDU 1503 Advanced Fruits

摘要: hdu : http://acm.hdu.edu.cn/showproblem.php?pid=1503题意:两种水果杂交出一种新水果,现在给新水果取名,要求这个名字中包含了以前两种水果名字的字母,并且这个名字要尽量短。也就是说以前的一种水果名字x是新水果名字s的子序列,另一种水果名字y也是新水果名字s的子序列。要你求s。做法:用求最长公共子序列的方法,求出x和y的最长公共子序列,然后再用递归思想,逐一输出,得到的就是最后答案。代码:View Code 1 #include<stdio.h> 2 #include<string.h> 3 int c[1010][1010 阅读全文

posted @ 2012-08-15 17:07 acoderworld 阅读(439) 评论(0) 推荐(0)

【转】动态规划解最长公共子序列问题--讲解

摘要: 动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】求两字符序列的最长公共字符子序列问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严 阅读全文

posted @ 2012-08-15 15:30 acoderworld 阅读(200) 评论(0) 推荐(0)

2012年8月14日

最长子序列---讲解

摘要: 最长子序列可以说是刚接触动态规划的人经常遇见也不得不解决的问题,最常见的有两种,一种是最长公共子序列(LCS),还有一个是最长上升子序列(LIS)。今天我就总结下这两个的做法。一:最长公共子序列(LCS) 题目描述:给你两个数组,可以是数字的,也可以是字符串,我们假设是数字的!举个例子: X = 1, 5, 6, 4, 1, 3, 7 Y = 1, 1, 6, 8, 3, 4, 7 求一个新的数组S,该数组中的每个数均是X和Y数组中的公共数,并满足原数组中数字的前后关系,这样的数组有很多个,比如说 (1,1),(1,1,3,7),(1,6,7)等。同时S数组要是... 阅读全文

posted @ 2012-08-14 21:23 acoderworld 阅读(92) 评论(0) 推荐(0)

2012年8月13日

网络流SAP--模板

摘要: 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 typedef struct {int v,next,val;} edge; 6 const int MAXN=20010; 7 const int MAXM=500010; 8 edge e[MAXM]; 9 int p[MAXN],eid; 10 inline void init(){memset(p,-1,sizeof(p));eid=0;} 11 //有向 12 inline 阅读全文

posted @ 2012-08-13 21:38 acoderworld 阅读(286) 评论(0) 推荐(0)

导航