算法入门经典第二版
文章平均质量分 69
Tyuio28
这个作者很懒,什么都没留下…
展开
-
例10-2 uva12169(扩展欧几里得)
题意:已知xi=(a*xi-1+b) mod 10001,且告诉你x1,x3.........x2*t-1,让你求出其偶数列 思路: 枚举a,然后通过x1,x3求出b,再验证是否合适 1.设a, b, c为任意整数。若方程ax+by=c的一组整数解为(x0,y0),则它的任 意整数解都可以写成(x0+kb', y0-ka'),其中a'=a/gcd(a,b),b'=b/gcd(a,b),k取原创 2015-10-09 17:59:44 · 340 阅读 · 0 评论 -
10-8 uva1262密码
题意:有两个图,每一列都存在的字母选作密码,就第k大的密码 思路: 找出各个位置上的密码, 假设: 第1个字母只能是{A,C,D,W}, 第2个字母只能是{B,O,P}, 第3个字母只能是{G,M,O,X}, 第4个字母只能是{A,P}, 第5个字母只能是{G,S,U}。 不管第1个字母是多少,后4个字母都有3*4*2*3=72种可能,因此当k≤72时,第1个字母 是A,当72原创 2015-10-10 20:00:37 · 457 阅读 · 0 评论 -
例10-6 uva1635(唯一分解定理)
题意:给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关? 思路:最后观察期规律符合杨辉三角,那么,问题就可以变成判断C(0,n-1),C(1,n-1)。。。。C(n-1,n-1)哪些是m的倍数,所以只需考虑m唯一分解后在C(i,n-1)中的情况 公式:C(k,n)=(n-i+1)*c(i-1原创 2015-10-10 18:46:35 · 403 阅读 · 0 评论 -
例10-9 uva1636简单概率问题
题意:一个01串,0代表没子弹,1代表有子弹。在开一次空枪后,开下一枪没子弹概率大的方案 ①接着开枪 ②随机转一下再开枪 思路: 在情况一就是求00在0中占的比例,情况二则是0在整个串中的比例 #include #include #include #include #include #include typedef long long ll; using name原创 2015-10-11 20:38:18 · 450 阅读 · 0 评论 -
例10-10 uva10491(简单概率)
题意: 在a+b扇门,a扇后面是牛,b扇后面是车。在你选择一扇门后,主持人为你打开另外c扇门,然后你再选一扇, 求是车的概率 ①先选牛:a/(a+b),然后还剩a+b-c-1扇门,其中b扇为车,所以a/(a+b)*b/(a+b-c-1) ②先选车:b/(a+b),然后还剩a+b-c-1扇门,其中b-1扇为车,所以b/(a+b)*(b-1)/(a+b-c-1) #include原创 2015-10-11 20:39:47 · 650 阅读 · 0 评论 -
例10-11 uva11181
题意:n个人去逛超市,第i个人买东西的概率是pi,,计算每个人实际买了东西的概率 思路: 搜索标处理所以的情况,得出所有概率和all(开始天真的以为是1 - -,就说怎么案例看着怪怪的),用tt[i]记录i参与买东西的概率和,tt[i]/all就是i实际买的情况 #include #include #include #include #include #include原创 2015-10-11 20:43:59 · 405 阅读 · 0 评论 -
例10-12 *uva1637(概率dp)
题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率。 思路: 直接用搜索,表示出每摞剩余的牌数,然后利用全概率公式即可(P(A) = p(A|b1)*p(b1)+.....+p(A|bn)*p(bn)) #include #include #include #include #include #include typedef long原创 2015-10-11 20:49:45 · 436 阅读 · 0 评论 -
例 7-10 uva12212(迭代加深搜索)
题意:对于一段数字,每次可以剪切一段连续的自然数,粘贴到任意部分,使其变成升序 思路: 考虑的是进行搜索,但是这样并不能保证是最短。迭代加深:枚举搜索深度,然后进行深搜。 这种方法比较适用于不知道明显深度的,以及每层展开情况过多而导致bfs不行的。 #include #include #include #include #include #include #in原创 2015-10-15 13:25:30 · 755 阅读 · 0 评论 -
习题9-8 uva1631
题意: 给你一串密码,每次我们可以转动1-3个数字,求转出最终答案的最小步数 思路: 感觉自己好坑,最开始想的是dp[cur][t1][t2][t3]也就是t1的位置以及连续的三个数的状态 但是卡死循环了,于是乎改成dp[cur][t1][t2](当前的位置以及它后面的数的状态) 每次求出当前位置转到正确答案时要的步数,然后枚举3种情况(也就是后面两个数是否一起转动) 但是原创 2015-11-17 11:08:00 · 888 阅读 · 0 评论 -
习题9-8 Uva1632
题意: 给你n个宝藏,然后给出他们的位置a[i]以及存在时间tim[i],如果能全部拿完,求出最短时间; 否则输出No solution 思路: 对于一段区间[i,j],你取完之后肯定是在最左端或者最右端,因为如果最后你停在中间位置,你始终会先到左右,所以并不能是最优解。 所以我们dp[i][j][0]表示拿完[i,j]后停在左端,dp[i][j][1]表示拿完[i,j]后停在右原创 2015-11-17 11:03:14 · 329 阅读 · 0 评论 -
习题9-4 uva 1630
题意: 给你一串数字,要求你对其进行折叠使其长度最短。 折叠情况:全是一个字母 & 重复的字符串 AAAAAAAAAABABABCCD --> 9(A)3(AB)CCD NEERCYESYESYESNEERCYESYESYES --> 2(NEERC3(YES)) 思路: 用dp[i][j]表示从 i 到 j 的最短情况。 不停的往下原创 2015-11-09 22:37:49 · 650 阅读 · 0 评论 -
习题10-1 UVA 11040(无聊水一水)
题意: 给你一个残缺的塔,每个数字由他下面左右两个数相加得。给你其中一部分,要求输出全部的数字。 #include #include #include #include using namespace std; const int maxn = 25; int tmap[25][25]; int main() { int T; scanf("%d",&T);原创 2015-11-09 22:29:10 · 383 阅读 · 0 评论 -
习题 7-3 uva211
题意:给你28个多米勒牌,要求刚好铺满一个7x8的图,输出所有答 案。每个牌只能使用一次 思路: 对每个位置分别搜索其右边 和 下边。 但是在中途,细节上有点问题。最开始想的是搜到最后一个点输出答案,但总是有问题。然后搜索部分换了个姿势,记录以使用的牌数,终于AC。感觉 - -自己好坑 #include #include #include #include #includ原创 2015-10-25 17:04:45 · 483 阅读 · 0 评论 -
例10-7 uva10820(欧拉)
题意:输入n,要求满足1≤x,y≤n,且x,y互素的个数。 若输入2,则答案3为(1,1),(1,2),(2,1);所以欧拉函数求出所有数的phi值,除了1之外都加上phi值的2倍即可 通过推导: phi[n] = n*(1-1/p1)*......*(1-1/pn) /*pi表示n的素因子,求出小于n与且与其互素的数 #include #include原创 2015-10-09 15:39:16 · 465 阅读 · 0 评论 -
例10-1 uva11582(裴波那切数列)
题意:你的任务是计算f(a^b)除以n的余数。其中f(0)=f(1)=1,且对于所有非负整数i,f(i+2)=f(i+1)+f(i)。 思路: 由于是模运算,因此整个序列肯定会出现重复序列,所以先找出周期,在利用快速幂求出a^b, #include #include #include #include #include #include #include using nam原创 2015-10-09 16:57:47 · 519 阅读 · 0 评论 -
习题7-1 uva 208(剪枝)
题意:按最小字典序输出a到b 的所有路径。 思路:先处理出个点到目标点b的情况(是否能到达),搜索即可。 最开始我只判了a能否到b,然后给我的是WA,然后看了半天感觉思路没什么问题,然后把所有点都处理出来,AC 实在是看不懂- -,好无语。 #include #include #include #include #include #include typedef lon原创 2015-10-24 18:07:39 · 567 阅读 · 0 评论 -
习题9-3 UVA1629(dp)
Cake Slicing 题意:有一个n行m列的网格上有一些黑点,要求进行切割,使最后每块上只有一个黑点,求最少的刀数 思路:记忆化搜索,枚举每一条边来切,每一次搜索自己所能切割的所有情况取最小值 但是TL,纠结了一下,发现明明2个for(横+竖)就能切出来,硬是被我写成了n^2 的,自己好坑- - #include #include #include #inc原创 2015-11-09 22:26:43 · 458 阅读 · 0 评论 -
例10-3 uva10375(唯一分解定理)
题意:已知C(m,n) = m!/(n!(m-n)!),已知p,q,r,s,求C(p,q)/C(r,s) 思路: 全部分解成质因子,相乘则加,除则减 #include #include #include #include #include #include #include using namespace std; typedef long long ll; typed原创 2015-10-09 20:14:02 · 361 阅读 · 0 评论 -
例10-4 uva10791(唯一分解)
题意:求最小公倍数为n的数的和的最小值。 如12:(3,4),(2,6),(1,12)最小为7 要想a1,a2,a3……an的和最小,要保证他们两两互质,只要存在不互质的两个数,就一定可以近一步优化 只是当n=1时,答案为2,而且可能会超,要用long long /*脑子一抽输出用了I64d,不停wr,好坑 #include #include #include原创 2015-10-09 21:50:33 · 362 阅读 · 0 评论 -
习题9-6 uva 10723
题意: 给你两个字符串,求一个最短的串,使得输入的两个串均是他的子序列(不一定连续) 思路: 可以看出ans = 两个串的长度和 - 两个串的最长公共子序列,在最后的构造处GG。 在构造时想了很久,想复杂了- -,后来看别人思路完全可以根据最长公告子序列的原理来 而且下次可以考虑画个图来看 ①a[i] == b[j]说明ans[i][j]只需要在ans[i-1][j-1]的组原创 2015-11-09 23:09:06 · 429 阅读 · 0 评论 -
习题9-5 UVA 242
Stamps and Enovelope Size 题意: 给你最多贴S张邮票。有N个邮票集合,每个集合有不同的面值。问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素。 如果不止一个集合结果相同,输出集合元素少的,如果仍相同,输出最大面值小的。 思路: 最开始直接进行的深搜,感觉应该会TL,就放弃了。主要是莫有想到记忆化搜索的使用 - -, 果然太年轻。 用dp[i][原创 2015-11-09 22:45:51 · 427 阅读 · 0 评论 -
例10-5 uva12716
题意:gcd(a,b) = a^b,( 1≤ a , b ≤ n) 思路: ① a^b = c, 所以 a^c = b,而且c是a的约数,枚举a,c,再gcd判断 ② 打表可知 a-b = c,而且a ^ b = c,枚举c及其倍数a,判断一下即可。 最开始用第一种,感觉太慢了- -,完全卡住了,可能方法不到位吧 然后尝试了下②,因为c是a的约数,先枚举c,然后用类似素数筛选的方法。原创 2015-10-10 15:59:53 · 381 阅读 · 0 评论 -
习题 7-2 uva225(回溯)
题意:从(0.0)点出发,第一次走一步……第k次走k步,且每次必须转90度,不能走重复的点。求k次后回到出发点的所有情况。按最小字典序从小到大输出。 思路: 把所有坐标+220,保证其是正数,然后搜索。 #include #include #include #include #include #include typedef long long ll; using原创 2015-10-25 16:56:35 · 492 阅读 · 0 评论