05 2016 档案
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1079 思路:如果把每种油漆看成一种状态,O(5^15)不行 DP[a][b][c][d][e][f]:a表示能凃一个的有多少个 b能凃2个的还有多少个 c能凃3个的还有多少个 d能凃4个的还有多少个
阅读全文
摘要:拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量。再枚举整个区间求最大值。 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件。就是向左的船一开始在最右边,向右的船一开始在最左边,则两船肯定相向运动到某个地方最佳。
阅读全文
摘要:POJ 3297 算法竞赛初级杂烩包 题意:学生选课,没个学生只能选一门课。大写字符是课的名字,小写是人名。如果课程后面有多个相同名字算一个,如果一个人选多门课,则他选不上课,输出课和每门课选课人数 思路: map<string,set<int> > stu:一个学生名对应他选了哪几门课 map<s
阅读全文
摘要:B - Pyramid of Glasses n层杯子,问k分钟能流满多少个杯子?和到香槟一样的过程? 思路:应为水的流速为每分钟一立方体(YY),可以做个转化,把最上层的杯子最原始的容积看成K,每个杯子的满的状态为体积为1,那么只要判断所有杯子体积是否大于1就可以。 C - Vasya and S
阅读全文
摘要:思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n
阅读全文
摘要:卡特兰数 卡特兰数2 卡特兰数:主要是求排列组合问题 1:括号化矩阵连乘,问多少种方案 2:走方格,不能过对角线,问多少种方案 3:凸边型,划分成三角形 4:1到n的序列进栈,有多少种出栈方案 NOIP2003 栈 1 //#pragma comment(linker, "/STACK:167772
阅读全文
摘要:题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法。 思路: DP[i][j]=sum(dp[i-1][k]); i表示当前这一行,状态为j有多少种方案 首先,i行能放牛的状态由前一行i-1决定。所以我们只要知道前一行的状态
阅读全文
摘要:网上证明很多,虽然没看懂。。。。 主要解决大组合数取模的情况 费马小定理求大组合数: a^(p-1)=1%p; 两边同除a a^(p-2)=1/a%p; C(n,m)= n!/(m!*(n-m)!) 所以C(n,m)=f(n)*qpow(f(m)*f(n-m),MOD-2))%MOD 预处理组合数f
阅读全文
摘要:1001 思路:首先把m个x分解成x*(m个1) 显然这样直接mod不行 又=((10^m-1)mod(k*9))/9 然后快速幂,同余运算 另一种做法是找循环节 1006 Gym Class 思路:先想一下,肯定是分数高的同学在前面先出来,怎样选择分数高的呢? 如果b不能出现先a的前面,我们可以建
阅读全文
摘要:题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数。 再考虑把a变成b的次数 ans[i]:a从(0,i)变成b(0,i)所需的最小次数 初始化ans[i]=dp[0]
阅读全文
摘要:题意:有一个队列,每个人有一个愤怒值a[i],如果他是第k个上场,不开心指数就为(k-1)*a[i]。但是边上有一个小黑屋(其实就是个堆栈),可以一定程度上调整上场程序 思路:枚举区间和每个人第几个上场 dp[i][j]:[i,j]的最小分数 假设区间[i,j],第i个人第k个出场(1<=k<=j-
阅读全文
摘要:题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了以后有更多的家庭订购,要将外卖送到的情况下使得所有用户的不开心值总和达到最小 思路:区间DP dp[
阅读全文
摘要:逆元详解 定义:满足a*x≡1 (mod p)的x值就是a关于p的乘法逆元。 实际就是a*x=k*p+1. x就是a模p的逆元 逆元一般情况下在求 (a/b)%p 且a很大 无法求a/b,推论:(a*k)%p=(a/b)%p k为b模p的逆元 还有很多用法 POJ 1845 详解见大神博客
阅读全文
摘要:题意:在一个数字序列中, 取出不包括头和尾的所有数字, 每次取出一个数字的代价等于取出的这个数和左右两个数的乘积, 求总代价和最小的取法 此小到大递归
阅读全文
摘要:http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1、只有三种上色方案,不上色,上红色,上蓝色 2、每对括号必须只能给其中的一个上色 3、相邻的两个不能上同色,可以都不上色 求0-len-1这一区间
阅读全文
摘要:输出一个串里面能匹配的括号数 状态转移方程: if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2; 然后再区间合并
阅读全文
摘要:题意:切一个凸边行,如果不是凸包直接输出。然后输出最小代价的切割费用,把凸包都切割成三角形。 先判断是否是凸包,然后用三角形优化。 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+w[i][k]+w[j][k]); w[i][j]代表i到j点的切割费用。 dp[i][
阅读全文
摘要:【动态规划】凸多边形最优三角剖分 枚举三角行,再递归三角形旁边的两个多边形。 【动态规划】凸多边形最优三角剖分 枚举三角行,再递归三角形旁边的两个多边形。
阅读全文
摘要:dp[i]][j]=min(dp[i+1][j]+1,dp[i+1][k-1]+dp[k][j]) 表示第i天到j的最小数量。如果第i天的衣服只自己穿的话,不考虑后面的就是dp[i][j]=dp[i+1][j]+1.否则就是dp[i][j]=dp[i+1][k-1]+dp[k][j],其中第k天的衣
阅读全文
摘要:石子合并(GarsiaWachs算法) 只能用该算法过!!! 详解看代码 1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交 2 #include<cstdio> 3 #include<cstring> 4 #incl
阅读全文
摘要:状态转移方程在代码中标出 本题注意是圆形,所以之前要预先处理一下s数组。处理之后总长度为2*n-1.第一个合并的起点有n个,所以总的方案数是n 注释在代码中标出 http://www.rqnoj.cn/problem/490 石子合并问题推荐几篇很好的文章 http://blog.csdn.net/
阅读全文
摘要:思路:a/n*b/n=lcm/gcd 所以这道题就是分解ans.dfs枚举每种素数情况。套Miller_Rabin和pollard_rho模板 1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交 2 #include<
阅读全文
摘要:Miller_Rabin就是以概论大小来判断素数 可以判断2^63范围的数 pollard_rho推荐两个很好的博客来理解:整数分解费马方法以及Pollard rho和[ZZ]Pollard Rho算法思想 1 //#pragma comment(linker, "/STACK:167772160"
阅读全文