摘要:
题目链接这个状态转移想了会时间,dp[i][j]记录前i分钟学了j分钟的取得的最大的分数,得到方程dp[i][j] = dp[i-k][j-k] + sum[i] - sum[i-k](l<=k<=j) ,这个果断并不是只是一个普通的DP,交上各种TLE,然后发现问题了,应该需要需要优化。这个状态方程神似以前单调队列优化DP的转移方程,只不过改成对角线了,而且只需维护队列的队头即可。对这部分还是不太自信啊,试着写了写,反正感觉写的不太好,WA了多次,乱改了几次后过了。。。不容易啊。 1 #include <iostream> 2 #include <cstdio& 阅读全文
摘要:
题目链接数据范围小,暴力乱搞即可。。。LCA是什么,以后研究把。。。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 int fa[10001],o[10001]; 7 int main() 8 { 9 int t,i,n,sv,ev;10 scanf("%d",&t);11 while(t--)12 {13 memset(fa,0,sizeof( 阅读全文
摘要:
题目链接转化真的是太神了,看了一下题解的提示,唉,真的是一个考验思维的题目。题目大意:n个人一起走,可以分成很多组,每个人说一句话,前面有几个人,后面有有几个人,最多有多少个人说真话。网赛的时候真心一点想法都没有啊,不知从何下手。。。看了一下题解的提示,这个问题只要转化一下,就是自己可以解决的问题了。每个人说的话,转化为一个区间,只需求最大不重叠区间的数目就可以了,这样就是以前做过的,排序后的线性的DP问题。敲的出来WA1次了,好在想了想有没有漏的情况,检查了出来,注意一下区间相同的时候的情况搞了个标记数组乱搞一下,2Y。 1 #include <iostream> 2 #incl 阅读全文
摘要:
题目链接弱爆啦,组合弱爆了,反正是没想出来怎么搞这个题,其实这个公式不难推啊,反正就是没推出来。今天队内赛,实在是没办法了,暴力写了个DFS,先把10以内的打出表来,发现类似杨辉三角的一个表,推不出公式,只能找规律了。也推公式,也找规律,中间还走会了神,发现borad上过的人N多了,有些着急,这样应该不难吧。。。又推了会,还是没想出来,找规律吧,估摸着应该是和上两项有关系,自己写了小程序测试一下几个数据和scf讨论了下,貌似真的是找出规律了。。。然后时间不多了,好在代码很短,马上快结束了,乱写了,最后在各种乱搞+思考之下,和暴力的写的数据对上了,中间错了2次,好在在4:53的时候终于AC了。。 阅读全文
摘要:
题目链接很不错的一个题,开始搞了一个裸树的,后来听宝哥说用DFS把一个节点给离散成一段区间,重新标号,想了一下,好久没敲树状数组了,敲完发现还是TLE,比较发现我用左儿子,右兄弟的建树好像效率很低啊,改成链表形式的邻接表存图,终于过了。 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 int p[200001],str[200001],end[200001],n,num; 5 struct node//挂链的邻接表 6 { 7 int data; 8 struct node *next; 阅读全文
摘要:
题目链接水题,不解释。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <map> 6 #include <queue> 7 #define ll __int64 8 using namespace std; 9 ll gcd(ll a,ll b)10 {11 return b == 0?a:gcd(b,a%b);12 }13 int main()14 {15 int t;16 ll 阅读全文
摘要:
题目链接matrix67大神出的题,做出来好激动啊。。。和前几天做的那个用鸽巢定理差不多,只不过是加上一个组合而已。开始把50000的组合数都给预处理出来了,果断TLE了,改了改处理到n,然后0ms秒过了。。。 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 #define MOD 1234567 5 int c[500001][3],p[500001],sum[500001],o[100001]; 6 int main() 7 { 8 int i,j,n,m,ans; 9 scanf( 阅读全文
摘要:
题目链接经典的状态压缩题目。这个题目就是在石子特别少100个,河却特别长10^9的情况下,而且跳的特别近只有1-10,有点像是省赛那个背包体积特别大的题,这种思想很重要,这个题目的代码写的很渣,思路是如果两个石子距离特别大,就可以近似的看成100,因为无论跳的能力是多少,距离很大,有很多种组合,跳不到石头上。压缩完,就按普通DP来搞就行了,注意特殊情况,特判。 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 #include 阅读全文
摘要:
这篇文章中讲到这个问题,这篇文章基本上把容斥原理解决的问题大体上都概括了,神文啊。http://www.cppblog.com/vici/archive/2011/09/05/155103.html题意:给出n,和一些数字,求1-n-1之间多少个数能被这些数整除的。思路,去看上面这篇文章吧,注意预处理把数据这些数中0和整除的数给筛出来,取交集的时候求的是lcm,就没问题了。 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 #d 阅读全文
摘要:
原文链接:http://hi.baidu.com/cydorniaknight/item/e304f00e7bd9f096a2df438ePS:各位ACMer保重身体啊。——————————————————————————分割线————————————————————————————————————————前些日子惊闻dsh的噩耗,是在网友的BLOG上看到的。当时我就笑了,怎么可能呢,愚人节还没过完么。不过仔细想想貌似有个把月没联系了, CALL之,但电话那头已经关机了。这时我就笑不出来了。后来从他同学那里得到消息,确实是几个月前查出肝癌晚期,几天前走了。还是不敢相信,精力如此旺盛的人,居然说 阅读全文
摘要:
题目链接题意:找和m互质的第k个数。容斥原理可以快速求出某个范围内,和m不互斥的个数,显然可以求出某个范围内互质的个数,所以只要取一个很大的end,二分即可,写二分的时候开始按普通的写的,发现不对,要找第一个出现的数才是结果,取end和容斥的模版敲错一点,查数据查出了错,4Y。 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 using namespace std; 5 #define ll __int64 6 int prim[1001]; 7 ll judge(ll x,int 阅读全文
摘要:
题目链接第一次做的时候竟然递归了,而且没有记忆化,这不是犯2吗。。。记忆化依旧TLE了之后,上递推,水过了。 1 #include <stdio.h> 2 #include <string.h> 3 #define N -10000000 4 int dp[21][21][21]; 5 int main() 6 { 7 int a,b,c,i,j,k; 8 for(i = 0;i <= 20;i ++) 9 {10 for(j = 0;j <= 20;j ++)11 {12 dp[0][i][j] = 1;13 ... 阅读全文
摘要:
题目链接知道了用这种方法做,想了会,没整出来,翻翻书,看到一个类似的。组合数学17页有个类似的例题,证明一定有解。大体过程,用sum[i],表示前i个的和对n取余,共有n个元素,这n个数里,如果存在0,很明显这是答案,如果不存在,则至少有两个数相同,sum[j]-sum[k] = 0,则这一段的和就是所求解的答案。难得1Y啊。。 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <map> 5 using namespace std; 6 int sum[ 阅读全文
摘要:
题目链接以前暑假一次练习赛的题目,当时如此的水题,很茫然啊,现在大体明白求期望都是倒着推的以后,这个题就很简单了。这个题直接算就可以,每一个状态都只能是从上一个状态推出来的,利用组合计算出概率,取倒数就是期望,因为精度WA了一次,好久没有1Y过了。。。 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <map> 5 using namespace std; 6 #define eps 1e-9 7 #define ll __int64 8 int mai 阅读全文
摘要:
题目链接算是裸裸的模版题了,求a - b上 和 n互质的数,可是做的很费劲啊,有个地方没用__int64,让我DEBUG了好久。。。 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <map> 5 using namespace std; 6 #define ll __int64 7 #define N 35000 8 int o[N],prim[10000],num; 9 ll judge(ll x, ll n)10 {11 int i,j,len;1 阅读全文