主要能解决的问题n个数中选取k个不相邻的数,使得这k个数的总和最小View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[2010][1010];int a[2012];const int inf = INT_MAX;int main(){ int n,k; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1;i<=n;i++) scanf("%d Read More
给你一幅图,再给你Q个询问每个询问为id c即如果将id这条边的边权改为c的话,这条边是否可能是最小生成树中的一条边做法:先对原图做一次最小生成树,顺便记录一下树中点对间的最长树边是多少如果id的边权c小于两点间最长的树边,则肯定可以去掉路径上的一条边使得最小生成树总权值更小View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int inf = ~0u>>2;const int maxn = 1010;bool flag[m Read More
有n个点排成一行,每两个点有一个权值。现在你可以从任何一个点出发,去遍历其他点,每经过两个相邻点之间的边,边的权值就会减1,求最多能走的步数用两个dp数组记录往左走和往右走的最大步数dp1[i][0]表示从i往左走最多能走的步数dp1[i][1]表示往左走并回到i最多能走的步数dp2同理然后遍历一遍就可得答案View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100010;long long num[maxn];l Read More
第一题我还写了一个dfs暴力--!实在是太水了,第三题一直错,赛后发现忘了特判x=3时的情况,第二题最后时刻一气呵成,无奈时间过了。。。。。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!结果自然名落孙山。但是有句话说的好失败是成功他妈 Read More
zoj 3611同类型的题目poj 2688化简模型即可得这样的问题,一幅图给定起点 终点 ,求起点到终点最多经过几个点,如果两种方案经过的点数相同,选路径总长短的注意,这幅图最多只有12个点,所以立刻可以想到用状态压缩来做dp[i][j]表示以i为终点的路径 为j状态(经过了那些点)时的最短路径ps:在预处理最短路的时候不要将'$'算进去,就看成一个普通的可以走的格子就可以了因为可能会出现如下情况,'$'的费用会算了四次,所以还是先数一下有几个'$'然后再独立算吧View Code #include<cstdio>#include& Read More
转自:http://bbs.dlut.edu.cn/bbstcon.php?board=Competition&gid=23474 其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧。 首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长, 这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做回文串问题中时比较烦的地方。这个算法还有一个很好的地方就是充分利用了字符匹配的特殊性,避免了大量不必要的重复匹配。 算法 Read More
吐槽一下,还是太弱了,这个被认为伸展树水题的题本菜搞了好久。。。给你n个数每次将第i个位置到第i大的数所在位置 之间的数进行翻转,输出的是第i大的数所在的位置伸展树的节点不需要记录任何东西,直接按照各个数在数组中的顺序建树即可(即建好伸展树后中序遍历的结果就是原数组的数)所以伸展树的节点编号的相对大小代表的是这个数在数组中的下标,这点一定要搞清楚然后建树的时候顺便记录下第i大的数所在的节点编号是什么。最后每次将第i大的数旋转到根,然后 左子树的大小 就是在数组中相对位置在这个数的左边的数的个数 因为每次将第i大的数翻转到第i个位置时,这个数就不会用到了,所以每次统计好后就直接把根节点给删了(删 Read More
raiting掉了。。。为什么除了B题其他题都这么长。。。。。还有万恶的C题,暴力枚举的时候我竟然从9开始枚举。。。。哎。C题是模拟题,我写的很烦,到了最后时刻才交,可惜啊,百密一疏。。。最近CF阅读量好大啊。。。。CView Code #include<cstdio>#include<cstring>#include<set>#include<string>#include<iostream>#include<cmath>#include<vector>#include<map>#include& Read More
转自 http://roba.rushcj.com/?p=439定义k-回文串如下:(1)任何串(包括空串)都是0-回文; (2)一个长度为n的回文串,若它的前n/2个字符和后n/2个字符都是(k-1)-回文,则它是k-回文。现给定一个串(长度不超过5,000,000),设它的每个前缀分别是x-回文,求所有这些x值的和。比如abacaba,”a”是1-回文,”aba”是2-回文,”abacaba”是3-回文,故输出6。将字符串 反转接在后面,然后KMP求解即可 把原串翻转后拼接在原来的串后面,用一个不在字母表中的分隔符隔开的。然后用KMP里对模式串的预处理那个过程,求出失配以后往前跳的那个指针 Read More
加油 Read More