摘要: 题目简介 写倒是很好写,但是重要的是读懂题并且抽象出模型。两只兔子一个顺时针跳,一个逆时针跳,每次只能跳到数值相同的石头上,且不能跨过之前跳过的时候,本质其实是求一个环的最长回文子序列。 dp[i][j]表示(i,j)这个区间的最长回文子序列长度,转移方程dp[i][j]=max(dp[i+1][j 阅读全文
posted @ 2016-11-14 20:02 Apiec 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 题目链接 这道题会暴露很多孩纸的高数学的好不好。如何计算三维直线的最短距离和垂足的坐标,学习链接 之后的就是代入公式计算了。 1 #include <stdio.h> 2 #include <math.h> 3 struct Point { 4 double x, y, z; 5 Point(dou 阅读全文
posted @ 2016-11-14 19:54 Apiec 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目链接 看了题目,因为n很小,最多20,第一反应是状压dp,首先预处理可能构成正方形的状态集合,然后背包算出来就行了,但是考量了一下复杂度,dp的状态是1<<20,然后当20个点是能构成的正方形的四个点,然后每个点重复5次,则能构成正方形的状态集合个数是4*4*4*4=256,dp转移的极限运算次 阅读全文
posted @ 2016-11-14 19:48 Apiec 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目链接 由于位运算|在区间上是单调的,所以只需要算出每个从i开始的能到哪个j结束,使得(i,j)这个区间里面所有子区间都是满足条件的,即可。 1 #include <stdio.h> 2 #include <string.h> 3 typedef long long ll; 4 const int 阅读全文
posted @ 2016-11-14 19:24 Apiec 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 题目链接 求[0,B]这段区间多少数的F(x)不大于F(A)。 F(A),求出来,之后的就是数位dp,dp[len][st]表示长度为len,之前各位上数字的花费为F(A)-st的数有多少个,记忆化搜索就好。 1 #include <stdio.h> 2 #include <string.h> 3 阅读全文
posted @ 2016-11-14 19:15 Apiec 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 题目链接 虽然想到了可能有规律,但是比赛的时候没有去仔细推敲。 暴力打表找出可以得到对应的长度n和对应字符集m所对应的答案 然后很容易发现规律,m=1和m=3的时,循环节分别是a和abc,m=2的时候,从长度为9的时候开始循环,循环节为babbaa,然后前面8个打表就行了。 1 #include < 阅读全文
posted @ 2016-11-14 18:43 Apiec 阅读(297) 评论(0) 推荐(0) 编辑