上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 25 下一页
摘要: 就是经典约瑟夫环问题的裸题我一开始一直没理解这个递推是怎么来的,后来终于理解了假设问题是从n个人编号分别为0...n-1,取第k个,则第k个人编号为k-1的淘汰,剩下的编号为 0,1,2,3...k-2,k,k+1,k+2...此时因为从刚刚淘汰那个人的下一个开始数起,因此重新编号把k号设置为0,则k 0k+1 1...0 n-k1 n-k+1假设已经求得了n-1个人情况下的最终胜利者保存在f[n-1]中,则毫无疑问,该胜利者还原到原来的真正编号即为 (f[n-1]+k)%n (因为第二轮重新编号的时候,相当于把每个人的编号都减了k,因此重新+k即可恢复到原来编号)。由此,我们可以想象,当最. 阅读全文
posted @ 2014-02-26 14:46 KRisen 阅读(3755) 评论(1) 推荐(4) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3735好久没做DP题了,一开始没理解题目里的C(M,3)是干什么,原来就是组合,C M 取3,就等于n*(n-1)*(n-2)/6;题目里还有一个细节是说电脑玩家是要一个接着一个打败,这样,规划方向也确定了,设dp[i][j]为当前打败了Ai电脑,并且阵容为j的概率最大值,dp[i][j]=max(dp[i][j],dp[i-1][j]*p[j][no[i]]) ,p[][]为对应的概率,no[]为电脑编号此外因为某个人可以在打败某个电脑之后变成该电脑的阵容,因此又能得到 阅读全文
posted @ 2014-02-22 10:41 KRisen 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 题意很简单,在一串正整数序列中找一个连续的子序列使该序列和大于等于一个已知量S,但要求序列长度最短,通常喜欢暴力枚举这个题目跟大白书之前的一个题目很像,在数列A中 求 Ai-Aj最大 并且 i=S,则不断增加i,否则,就增加j。这样只是枚举了一下终点,而找到起点几乎是常数时间。#include #include #include using namespace std;int num[100010];int B[100010];int main(){ int n,s; while (scanf("%d%d",&n,&s)!=EOF) { for (int i 阅读全文
posted @ 2014-02-18 11:52 KRisen 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 这是大白书上的例题,刘汝佳的解题方法很巧妙。要把初始盘子移到最终状态,先把最大的盘子安置好,否则无法成功,所以先找到最大的没在最终柱的盘子,先移到该盘子所在柱子上只有该盘子,并且其他盘子都在中转柱上(已经进入最终柱的最大盘子不考虑了),通过一个递归解得到该状态的步数,然后放完该盘子之后,就变成了一个柱子上放剩余盘子,由底向上把剩余的盘子按终态放好,需要用到汉诺塔的一个已知结论就是把一个汉诺塔的所有盘子从一个柱子移到另一个柱子上,需要用2的n次方-1步。#include #include #include #define ll long longusing namespace std;int n 阅读全文
posted @ 2014-02-02 20:19 KRisen 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 这道题是长沙区域赛的一道简单题,当时题目在ZOJ重现的时候就做了一次,但是做的好复杂,用的BFS暴力,而且还没打表,最后还是莫名其妙的爆栈错误,所以就一直没弄出来,昨天做到大白书上例题05年东京区域赛的一道类似题 Colored Cubes,这类题都需要脑补一下立方体的旋转总共有几种状态,然后用函数或者手工打表来记叙每一次变化之后的立方体变化这道题从编号开始就给了我们很大便利,从0-23,读入数据也是按照这个来,很方便。我是手工打的表,说实话,魔方的转动还是有点复杂,我还真不知道用函数怎么打出表来。吐血的是我一开始脑子居然觉得只有4种旋转方式,其实有6种,当然不考虑对应面的旋转,否则就有12种 阅读全文
posted @ 2014-01-29 16:47 KRisen 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 我是用暴力过的,虽然网上说刘汝佳出的这道题考的是堆,我不太懂,。。用暴力时间复杂度高一些,但是一样能过所要注意的就是周期问题,因为只要同时存在某一天超过一头牛产奶量最小,就不会杀牛,而每头牛的周期和每天产奶量都不一样,我一开始用周期最长的做指标,如果超过这个指标还没有牛被杀,说明状态稳定,输出。。。但是这样是WA的。。。正确的周期应该是所有牛的周期的最小公倍数(也可以超过最小公倍数,但无疑最小公倍数是最优的),这也给了我一些新启发,周期不同的时候把所有可能性都走完,就是最小公倍数#include #include #include using namespace std;struct node 阅读全文
posted @ 2014-01-20 17:35 KRisen 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 这个题目我昨晚看到的,没什么思路,因为马里奥有boot加速器,只要中间没有城堡,即可不耗时间和脚力,瞬间移动不超过L距离,遇见城堡就要停下来,当然不能该使用超过K次。。。我纠结了很久,最终觉得还是只能写个BFS,剪了下枝,不出意料还是TLE。。。后来还是找的别人博客看了一下。。。其实之前也做了好多DP,也应该能想到,既然加速器可以用k次,则,每个点都有k个状态,通过DP,把各个状态进行下取优,就可以了。。。这不得不让我对DP有了些新的理解,DP在状态转移的时候,就好像最短路里面的松弛操作,或者二者只是外表的不同,本质是遵循一个道理。当然在DP之前还需要一些处理首先用个g[][]二维数组把题目所 阅读全文
posted @ 2014-01-20 17:25 KRisen 阅读(666) 评论(0) 推荐(0) 编辑
摘要: 这个题目一看就是用并查集,有N个国家代表,在M行给出两两之间的关系,敌人或者朋友,(当然如果该关系跟已知关系冲突,则输出-1)关系的几个约束条件时这样的在朋友方面,朋友的朋友就是自己的朋友,这个就是并查集。在敌人方面,x和其所有朋友的敌人都是敌人。x和其所有敌人的敌人都是朋友。主要是这个敌人的状态不太好表示,不是一个并查集能做到的,我一开始犯糊涂,直接用个图把x的敌人存贮起来,但是因为每次交新的朋友或者敌人,就要搜索全图,而且要把自己的敌人圈更新到整个朋友圈,这样不仅难以实现,复杂度也是相当高后来就发现一个神级方法,简单易用,即,每个国家都有自己的对立面(实际上不存在),作用是这样的,x的对立 阅读全文
posted @ 2014-01-20 16:41 KRisen 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 这个题目题意简单,但是TLE得哭哭的。。。输入 a b w x c五个数,最终要使得c=x,则 b=b-x,同时 c--;如果b=x的时候,c和a才差距减少1,我一开始的优化是,分别对于两个条件,第一个,直接求出b小于x之前总共能撑几秒,这样直接把c减少就行,。。。对第二个条件,稍微推导一下发现,每一秒b是递增了w-x(题目条件说了w>x),因此也可以直接求出b在满足该条件时能撑几秒,直接加到结果里。。。但是这样的优化显然不够,结果任然是TLE,所以需要更强力的推导于是前面已经说到,c和a只有在第一个条件的时候才会距离缩短1,也就是说从头到尾,第一个条件总共会占用 c-a秒,这个很好理解 阅读全文
posted @ 2014-01-20 16:12 KRisen 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 终于可以写这道题的题解了,昨天下午纠结我一下下午,晚上才照着人家的题解敲出来,今天上午又干坐着想了两个小时,才弄明白这个问题。题意很简单,给出一个无向图,要求从1 到 n最短路两次,但是两次不允许经过同一条边(正反都不能经过),如果能成功,则输出两次的最小长度。否则输出一句话。我当时就马上敲了一个最短路,执行两次,在第一次执行完之后就把所经过的路径的正反都锁定好,不允许下次再访问。。。这样做通过了sample,但是WA了,我后来上网查,原来好多人是我这种做法,。。而且原来这是最小费用最大流问题。分析一下为什么我的做法不行,因为这道题目要求在能通过的前提下,最短,也就是说,我连续两次最短路,如果 阅读全文
posted @ 2014-01-16 13:15 KRisen 阅读(458) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 25 下一页