随笔分类 - ACM-ICPC Live Archive
摘要:概率题题意:输入case数,每组case两个数字,表示A的点数和B的点数,他们玩游戏,每个人赢的概率都是0.5。输的人要将自己的一部分点数给对方,给的点数是min(na,nb)。例如na=3,nb=2如果A赢了,B要给2点给A,即全部给完。如果B赢了,A要给2点给B,A变为1,B变为4。一个人的点数为0,那么游戏结束了。题目要你输出两个数学期望,第一个是,这个游戏要结束,要玩多少局的数学期望,另一个是A赢的概率这题一开始看觉得是期望DP,后来想想也可以不写DP,能把状态表达出来即可。设一个状态(n,m,c)表示A现在的点数是n,B的点数是m,已经玩了c局。那么游戏结束的状态就是(n,0,c)或
阅读全文
摘要:poj 2168 相同的题目区间DP题意:输入n,表示有n个海龟在一条直线上,乌龟可以站在相同的位置(即坐标可以相同),下面n行,每行两个数字,表示第i个乌龟给出的信息,第一个数字表示它前面有多少只乌龟,第二个数字表示它后面有多少个乌龟。并不是每个乌龟的信息都是正确,有些乌龟的信息是假的,或者和别的乌龟信息冲突,你的任务是选出尽量多的乌龟,使他们的信息不冲突,然后输出有多少个乌龟说谎,和那些乌龟的编号,可能有多种情况,只要保证说谎的乌龟数最少,输出哪种情况都可以分析:乌龟可以站在一样的位置,我们给乌龟排名,可以把它们放在不同的位置 例如 1 2 3 3 3 4 4 5 , 虽然有些排名相同,但
阅读全文
摘要:网络流UVA 1161 是相同的题目这题网上找不到任何题解的,看上去是个最大流,但是最难搞的就是有时间限制,现在基本上能确定的就是要拆点,但是怎么拆不确定,我用了这种拆法就一直超时超时的原因我总结一下有几个可能。1.构图的代码太烂,可能出了什么差错但是找不出来。2.数组开小了?开大了?3.和第1个原因,然后运行EK的时候掉进了死循环或者效率太慢。4.EK太慢,要用ISAP超时的代码/*原本的点从0到n-1标号,但是每个点需要占用2880个空间,所以对于原来第u个顶点,怎么确定那个范围是它可以用的就是[u*2880 , (u+1)*2880-1]如果读入了点u,时间为t而且它是作为到达时间,那么
阅读全文
摘要:求解无向图的点连通度,转化为网络流详细的解释明天再写了#include <cstdio>#include <cstring>#include <queue>using namespace std;#define N 60#define min(a,b) a<b?a:b#define max(a,b) a>b?a:b#define INF 0x3f3f3f3fint first[10*N];struct edge{ int u,v,cap,flow,next;}e[N*N*N];int nume;int n,m;void EK(int s ,int
阅读全文
摘要:动态规划黑书的例题,老题了,2000年的国赛题,题意看黑书吧,太长了。。。比较典型的按阶段性决策,整个dp还是不难想的,1A分析在代码中/*按时间决策的DP,或者说按阶段性决策当前要跳的格子出现了,那么怎么跳其实只有两种选择,用左脚去踩或者右脚去踩所以要枚举前一个格子结束的时候,左右脚在什么地方,如果用左脚踩会产生多少花费,用右脚踩会产生多少花费dp[i][l][r]表示踩完第i次,左脚在l这个格子上,右脚在r这个格子上的最小花费那么最终要找的答案在dp[n][l][r]中,所以要扫描一次dp[n]找到最大值由题目的性质就知道可以使用滚动数组,而且题目也没提到序列的长度,所以用滚动数组也更为保
阅读全文
摘要:最小费用最大流2010的国赛题,题意很易懂不解释了。分析部分参考了别人博客:一般的最小费用最大流是给出每个单位流量的费用,计算费用的时候是单位费用*流量,但是这里是单位费用*流量*流量,并不能单纯地计算,要巧妙地拆容量,每条边的原容量为cap,拆成cap条,每条容量都是1,第一次取这条路时是单位费用a,第二次是3*a,依次为5*a,7*a,9*a,这样你会发现,这条路走容量2的话刚好是4a,3为9a,4为16a,5为25a,接下来做一最小费用最大流即可另外注意一点,题中说明边数最大为5000,而每条边的容量最大为5,所以在开数组的时候应该开到 2*5*50000,原来的一条边要拆成cap条边,
阅读全文
摘要:动态规划poj 1141 ural 1183 zoj 1463 都是相同的题目,黑书DP的例题输入比较恶心,有空串。递推的时间是1s多,记忆化的时间是4.3s勉强过,原理不说了百度各种有/*1.dp[i][j]=dp[i+1][j-1] , p[i][j]=-1 , --->p[i+1][j-1]2.dp[i][j]=dp[i+1][j]+1 , p[i][j]=-2 , --->p[i+1][j]3.dp[i][j]=dp[i][j-1]+1 , p[i][j]=-3 , --->p[i][j-1]4.dp[i][j]=dp[i][k]+dp[k+1][j] , p[i][
阅读全文