02 2014 档案
摘要:这道背包题和我们常见的背包题有所不同。如果根据以前做背包的惯性思维和题中数据的迷惑,会把概率乘以100来当作容量。但是经测试是不行的。我们不妨换种思路,看做DAG上的DP思想。将所有有可能达到的钱的最大“逃跑”概率算出来,最后再将能够达到的最大的钱输出。而能不能够达到这个可以将所有除0以外的值初始化为0.意为逃跑的概率为0。#include#include#includeusing namespace std;int main(){ //freopen("data.in","r",stdin); double dp[10005]; int sum,n,t
阅读全文
摘要:定义P-position和N-position,其中P代表Previous,N代表Next。直观的说,上一次move的人有必胜策略的局面是P- position,也就是“后手可保证必胜”或者“先手必败”,现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position 的局面是P-position。
阅读全文
摘要:今天碰到一道题,HDOJ 1059,因此便去学习了一下二进制的优化。为什么是二进制优化而不是三进制四进制优化呢?因为二进制中只包含0 1两个数,恰好可以代替背包状态中的放与不放。换句话说,是当该类物体被拆分了之后,可以表示可表示的所有的数,具体证明便不提了。对于多重背包,自然没什么好说的,是二进制优化的基础。而对于完全背包(即物品的个数有无限个),我们不妨将其看做v/c[i]件的多重背包,因为v/c[i]为其有效件数。下面贴代码:#include#include#includeusing namespace std;const int SIZE=60000;int dp[SIZE+5];int
阅读全文
摘要:归并排序是一种利用了分治思想的一种算法,是我在白书上看到的一种高效的排序算法,因此学习一下,并在此做下总结,加深理解。(毕竟也不能老是用sort不是?)首先由此算法我了解到了一种分治三步法的一种概念(一直对于这些东西云里雾里啊T T)。划分问题,递归求解,合并问题。而归并排序则非常清晰地完成了这三步。划分问题便是想要尽可能的把数组分为两半,使之变为两个较小的问题。递归便是不断地将问题划分地更小。而合并便是问题的关键所在了。假设现在最初的两部分已经排序成功,那么A,B两集合必然是有序的。因此我们便可以贪婪地取两个数组中最小的数来构成一个新的集合,而这个集合便是排序好了的。如{1,5,7,8}与{
阅读全文
摘要:上次因为haipz组织的比赛中有道题必须用到KMP算法,因此赛后便了解了下它,在仔细拜读了孤~影神牛的文章之后有种茅塞顿开的感觉,再次ORZ。附上链接http://www.cnblogs.com/yjiyjige/p/3263858.html。对于整个KMP算法,最精髓的部分便是关于next数组的生成。一开始ruijia liu的书上贴上的代码感觉完全不能理解,但是看神犇的分析觉得似乎明白了什么故写下此文来理理思路。在整理思路之前首先记住一句话:next[j]表示的是当在str2[j]!=str1[i]时,j指针应该移向的位置。对于next[j]的还有一种理解:对于0到当前j这样一段字符串,是
阅读全文
摘要:纠结1242很久了,查了题解才发现要优先队列才能成功http://blog.chinaunix.net/uid-21712186-id-1818266.html使人开窍之文章优先队列,已经不算是FIFO的队列了,而是一种以优先级(可以是值的大小等等)进行动态插入数值的一种“伪队列”,其中优先队列是用堆而优先队列中与BFS的关系便在于,BFS的出队便是代表着使用方法与队的方法差不多,(STL)接下来是代码与解析#include#include#includeusing namespace std;const int SIZE=300;int M,N;char map[SIZE][SIZE];in
阅读全文
浙公网安备 33010602011771号