上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 25 下一页
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的边相交),如果平面上已经出现了一个三角形,则不能在这个平面上继续连接边了。 首先在最优情况下,优先考虑的是一个点不连两条直线,否则就直接输了。因此一个n个点的局面连了一条直线后,分为了两个子游戏,i个点和n-i-2个点,则sg[n]=mex(sg[n]^sg[n-i-2])。然后打表找规律,发现大于n大于68后就是34的循环节了。 1 //STATUS:C++_AC_203MS_428KB... 阅读全文
posted @ 2013-08-11 00:09 zhsl 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4661 题意:有n个人呈树状结构,每个人知道一个独特的消息。每次可以让一个人将他所知的所有消息告诉和他相邻的人。求所有人都知道所有消息花时花的步数最少的所有方案数。 首先需要满足的是最小的步数,所以我们一定是先把所有消息先传到一个人手中才是最优的,然后再从这个人传回去,也就是每条边走两次。我们只需要考虑单向传到某个人的方案数cnt,因为再传回去也是cnt。那么我们可以枚举每个点为收集点,把所有的和加起来就是答案。这里就是一个树形DP的问题,转移的时候是一个组合问题:记录f[u],cnt[u]... 阅读全文
posted @ 2013-08-10 21:54 zhsl 阅读(783) 评论(3) 推荐(1) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4665 本题的2-SAT建图颇为复杂,有时间再来填坑(自己写的一直挂着,标程建图太复杂了)。。。然后用暴力搜索,用一个栈保存第一个序列就可以了,因为题目是SPG,并且重复的最多只有四个,所以搜索很好过。。 1 //STATUS:C++_AC_62MS_276KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #incl... 阅读全文
posted @ 2013-08-10 00:25 zhsl 阅读(422) 评论(4) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4655 先不考虑相临的有影响,那么总数就是n*prod(ai),然后减去每个相邻的对总数的贡献Σ( Min(a[i],a[i+1])*prod(i-1)*prod(i+2) ),其中prod(i)为[1,i-1]这个区间a[i]的积,prod(i+2)表示的是[i+2,n]这个区间,答案就是n*prod(ai)-Σ( Min(a[i],a[i+1])*prod(i-1)*prod(i+2) ),可以得到取得最大值是ai的排列就是最小,最大,次小,次大,例如:1 2 3 4 -> 1 4 2 3 阅读全文
posted @ 2013-08-09 23:52 zhsl 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4662 倒推考虑长度就可以了。 1 //STATUS:C++_AC_31MS_240KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include... 阅读全文
posted @ 2013-08-09 23:41 zhsl 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 开始方程想错T^T,题解见下面。。。 dp[i][j]表示队列中有i个人,Tomato排在第j个,能发生所求事件的概率。 显然,dp[n][m]即为所求。 j == 1 : dp[i][1] = p1*dp[i][1] + p2*dp[i][i] + p4; 2 k : dp[i][j] = p1*dp[i][j] + p2*dp[i][j-1] + p3*dp[i-1][j-1]; 化简: j == 1 : dp[i][1] = p*dp[i][i] + ... 阅读全文
posted @ 2013-08-07 22:32 zhsl 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:买食品收集n个卡片,每个卡片的概率分别是pi,且Σp[i] Σp[i]*f[s]=Σp[i]*f[s|(1 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #inc... 阅读全文
posted @ 2013-08-07 19:32 zhsl 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 简单概率DP,转移方程:f[i][j]=f[i][j]*p1+f[i][j+1]*p2+f[i+1][j]*p3+2 —> f[i][j]=(f[i][j+1]*p2+f[i+1][j]*p3+2)/(1-p1). 1 //STATUS:C++_AC_2828MS_32180KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #inc... 阅读全文
posted @ 2013-08-07 11:32 zhsl 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4651 题意:求n的整数拆为Σ i 的个数。 一般的递归做法,或者生成函数做法肯定会超时的。。。 然后要奇葩的用到一个,然后根据公式递推就可以了,先预处理下,复杂度O(n*sqrt(n)).. 1 //STATUS:C++_AC_796MS_1012KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #includ... 阅读全文
posted @ 2013-08-07 01:22 zhsl 阅读(1408) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4649 题意:给一个位运算的表达式,每个运算符和其后的运算数有一定概率不计算,求最后表达式的期望。 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就得到了总体的期望。 对于每一位,状态转移方程如下: f[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少。 f[i][1]=f[i-1][1]*p[i]+根据不同运算符和第i位的值运算得到1的概率。 f[i][0]同理。 1... 阅读全文
posted @ 2013-08-07 01:10 zhsl 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4648 求遍前缀和,然后扫描标记下就可以了。。。 1 //STATUS:C++_AC_453MS_1792KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #incl... 阅读全文
posted @ 2013-08-07 01:04 zhsl 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4647 注意这题两人的决策是想要使得自己的分数与对方的差值最大。。 注意到数据范围,显然是贪心之类的,如果没有变那么很简单,如果有边,那么我们进行拆边,把边的权值的一半加到所连的点上。然后排个序贪心。。 1 //STATUS:C++_AC_218MS_1020KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #in... 阅读全文
posted @ 2013-08-07 01:02 zhsl 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4035 很不错的概率DP题目,因为这题是无向图,所以要对叶节点和非叶节点考虑,然后列出方程后,因为数据很大,高斯消元如果不特定优化会超时,可以转化方程,然后求解系数。解法: 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 (概率为ei) 3.和该点相连有m条边,随机走一条 求:走出迷宫所要走的边数的期望... 阅读全文
posted @ 2013-08-06 11:17 zhsl 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3593 带环的概率DP一般的做法是求出转移方程,然后高斯消元解方程。但是这里的环比较特殊,都是指向f[0]。 此题的转移方程为:f[i]=Σ(f[i+k]*p[k])+f[0]*p[0]+1. 我们可以设 f[i]=A[i]*f[0]+B[i].带入右边有: f[i]=Σ(A[i+k]*f[0]*p[k]+B[i+k]*p[k])+f[0]*p[0]+1. -> f[i]=Σ(A[i+k]*p[k... 阅读全文
posted @ 2013-08-05 17:58 zhsl 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3744 简单的概率DP,分段处理,遇到mine特殊处理。f[i]=f[i-1]*p+f[i-2]*(1-p),i!=w+1,w为mine点。这个概率显然是收敛的,可以转化为(f[i]-f[i-1])/(f[i-1]-f[i-2])=p-1。题目要求精度为1e-7,在分段求的时候我们完全可以控制进度,精度超出了1e-7就不运算下去了。当然此题还可以用矩阵乘法来优化。 考虑概率收敛代码: 1 //STATUS:C++_AC_0MS_164KB 2 #include 3 #include 4 #include 5 //#i... 阅读全文
posted @ 2013-08-05 17:47 zhsl 阅读(340) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 25 下一页