dp
文章平均质量分 56
meixiuxiudd
卖萌木有用
展开
-
素数打表 cf 546D
素数打表代码:memset(a,0,sizeof a);for(int i = 2; iif(!a[i]){for(int j = i; j a[j] = a[j/i] + 1;}题目代码#include #include #include #include using namespace std;int ans[5000001];i原创 2015-06-08 19:28:15 · 465 阅读 · 0 评论 -
树形dp hdu 4126 Genghis Khan the Conqueror
先用prime算法求一次最小生成树,最小生成树用链式前向星储存起来,然后树形dp预处理,节点i到子树j的最小距离,每次访问改变一条边的值,删去这条边,这个最小生成树被分为两个子树,dfs求得连接这两个子树的最小权值边,将每次访问后的最小生成树权值加起来除以访问次数即得到平均值,#pragma comment(linker, "/STACK:1024000000,1024000000") #i原创 2015-09-04 13:29:55 · 304 阅读 · 0 评论 -
CF DP Minimization
链接:http://codeforces.com/problemset/problem/572/D这道题很巧妙要求绝对值的最小,怎么想都想不出来怎么做,想一想要是排序的话,后面减去前面的就不用绝对值,感觉要贪心但是呢,仔细分析感觉只贪心不行啊,两两组合关系不好分析n的范围是1到3e5,k的范围是5000明显猜测复杂度应该是与这个k紧密相关的那就让每个数都转化为与在1原创 2015-10-29 03:29:06 · 351 阅读 · 0 评论 -
UVA11775 Unique Story dp+二维树状数组优化
先用map处理字符串每个元素,然后用数组储存要求不相同的所有组合,我们反着来求x = a(第一个字符串能构成的所有的组合序列)+b(第二个字符串能构成的所有的组合序列) - c(两个字符串中的相同组合序列)*2a = 2^n(第一个字符串的元素个数)-1;同理b;(很煞笔的用组合公式求2333,后来反应过来也没有改了)dp[i][j]代表以a字符串中的第i个元素为组合序列的最后一个原创 2015-11-23 10:53:21 · 390 阅读 · 0 评论 -
LCS dp Batman lightoj 1159
就是一lcs变形dp[i][j][k]表示第一个字符串前i个,第二个字符串前j个,第三个字符串前k个原创 2015-11-17 16:41:05 · 355 阅读 · 0 评论 -
11688 uva 二叉树的旋转+dp Rotate to root
把二叉树旋转先模拟几遍,要不然这个题。。。gg模拟下叶子节点如何转为root h:向下还能到达的深度dep:所在的深度lm:root到节点需要左移多少次rm:root到节点需要右移多少次这个方程还比较好理解,最后转为root的时候他的子树的lm,rm,一定是这样的距离dp[root] = max(h[r[root]]+lm+1,h[l[root]]+rm+1);原创 2015-11-24 16:53:58 · 692 阅读 · 0 评论 -
Codeforces Group Projects dp
http://codeforces.com/contest/626/problem/F特别好的一道dp想到了每个数作为一个集合的上界,下界。。。情况去分析但是一直想不通k的值的变化怎么搞。。。。。。看了别人的代码才明白过来,运用了累加的思想。。。。先排序状态的表示为dp[i][j][t]前i个,有j个集合没有最大数,当前积累的k为t每次增加一个i,t 的变化为t+(a[原创 2016-02-20 22:22:10 · 419 阅读 · 0 评论 -
周赛题解报告-2013 亚洲南京区域赛
全是2013 亚洲南京区域赛的题感触挺深的。。补了五道题,之后要是补了会加上来。。。。A:GPA 水题没什么好说的B;Poor Warehouse Keeper 贪心这道题被精度wa了。。。1e-5要以最短的步数到达给定的x,y可以看出x的增加次数是固定的步数要最短,那么我们贪心的原则就是在x越小的情况下使得y的增长到极限极限是什么呢,就是当前的均值要小于等于(原创 2016-02-29 21:41:37 · 683 阅读 · 0 评论 -
Uestc ABCDE 1037
好久不写题解。。。给定一个数n,求有多少个集合满足能够构成1到n的所有数字。具体规则看题思路:很明显是要n^2预处理出所有的情况但是状态不好搞啊==现场时这个dp没有想出来dp的关键是要解决如何能保证在dp转移的时候同时满足这个能构成n的所有数字的条件对于这种条件有个性质要知道,表示这个性质已经不是第一次遇见了。。。。对于一个已经满足条件的集合x,集合元素之和为s,原创 2016-04-13 15:59:52 · 245 阅读 · 0 评论 -
树形dp The Tree Root uva10459
树形dp,两次dfsson1[u],节点u向下能访问到的最大深度son2[u],节点u向下能访问到的次大深度f[u],节点向上能访问到的最大深度第一次dfs求得son数组dfs(v,u); if(son1[v]+1 > son1[u]){ son2[u] = son1[u]; son1[u] = son1[v]+1; } else{ s原创 2015-12-03 23:11:39 · 299 阅读 · 0 评论 -
数位dp hdu3709 Balanced Number
题意:找出区间内平衡数的个数,所谓的平衡数,就是以这个数字的某一位为支点,另外两边的数字大小乘以力矩之和相等,即为平衡数思路:自己一开始的状态搞错了,dp[i][j]表示第i位为第一个数,j为i到支点的力矩然后想的是枚举支点的位置用dp来写,但是发现,有问题,之后每位的值会被前面的值所影响,有时这位数可以是0—9没有限制,但是有时候是0—这位数的值,这样的dp方程,不仅要结合前面的原创 2015-09-09 01:49:25 · 349 阅读 · 0 评论 -
期望概率dp lightoj 1038 Race to 1 Again
从考虑第一步开始p(x):代表从x到1的期望n的所有因子为n,a1,a2....,1(可以打表求出),总个数为size, x = size - 2;p(n) = (p(a1)+1+p(a2)+1+.....+p(ax)+1)*(1/size) + 1/size + (p(n)+1)*(1/size);化简式子得到:p(a1)+p(a2)+,,,+p(ax) = s;p(n)原创 2015-11-17 16:54:33 · 379 阅读 · 0 评论 -
cf 状压dp Little Pony and Harmony Chest
http://codeforces.com/problemset/problem/453/Bcf机子跑的真快,4亿的复杂度都可以跑过,最多也就1s多,给的4s当时写的时候不太敢写,觉得4e8了==,况且自己还要递归打印于是各种优化,300多ms就跑完了,给的4sdp[i][j]前i个数,对应的所存在的素数的状态为j时,差值的最小值 (对应的b序列最多是1到58,就是16个素数,原创 2015-10-12 00:16:51 · 288 阅读 · 0 评论 -
DP WuKong hdu2833
挺好的一道题想到对于任意两点(可相同),如果两路径都经过那么一定是走同样的两点之间的最短路这道题就迎刃而解啦代码如下:/* ^^ ====== ^^ ID: meixiuxiuPROG: testLANG: C++11*/#include #include #include #include #include #include #include #incl原创 2016-04-28 01:54:37 · 277 阅读 · 0 评论 -
2016"百度之星" - 复赛(Astar Round3)1001 D++游戏 hdu 5712
这道题一看当时一猜不是dp就是搜但是无论是搜还是dp都要解决一个问题就是一个序列被删除后剩下的两部分是连在一起的,这个时候怎么搞当时我想的是枚举一开始的等差数列那么再去求等差数列的相邻两项的值就行,这样就不会存在不连在一起的情况来了我当时很确定这个想法入口是很正确的,但是我一直想的是去搜每个小区间,但是我一直想不出来怎么搜,最后和别人聊天去了后来看了别人的代码,恍然大雾,以后写原创 2016-05-30 13:47:52 · 1082 阅读 · 0 评论 -
codeforces Trains and Statistic DP
题意就不用描述了dp+数据结构优化+贪心dp好弱啊==这题一看就是dp+一个log级别的优化但是我不会,看了题解dp[i]:代表p(i,n)官方题解有这个公式dp[i] = dp[m]+(n-1-i)-(ai-m)m为从i+1到ai中am是其最大值的位置dp[m]代表从m后面的所有的票n-1-i:至少要用的票,对于剩下的每个位置至少都要一张票对不,至于减一,原创 2016-05-18 18:40:57 · 410 阅读 · 0 评论 -
树形 DP hdu4714 Tree2cycle
好坑的题,如果不加栈就会re,加栈以后记得交c++#pragma comment(linker, "/STACK:1024000000,1024000000")树形dp思路:分析出构成环的最少步骤其实就是找将分开一条一条线连接成环从每个点开始分析如果一个点它的度数是小于2那么这个点所连接的边就一定不会拆开如果这个点的读书是大于或者等于2此时如果这个点和它的父原创 2015-09-03 16:02:44 · 424 阅读 · 0 评论 -
树形dp 总结
树形 dp个人 总结和感想:做树形 dp 题目时,第一件要做的事就是分析这颗树的特点,(双向 or 单向),然后联系题目,去分析这棵树树形 dp 的分析离不开子树(很重要的部分),父节点,子节点,兄弟节点甚至于是父节点的父节点,子节点的子节点, 节点与节点间的关系, 节点与子树的关系, 节点与边的关系, 树与树的关系,边与边的关系我们要将与我们所求的有联系的一一分析.dp 的状态建原创 2015-09-07 21:03:59 · 514 阅读 · 0 评论 -
题解 cf div2 193B
这道题一开始没用dp做,但是写的代码一直wa,看了别人代码自己写了下用到dp的思想,枚举第二个子列,然后每次比较当前的pre(第二个子列和这个子列前最大的第一个子列之和),得到更大的便更新pre代码如下:#include #include #include #include using namespace std;#define maxn 200005long原创 2015-06-08 01:05:35 · 533 阅读 · 0 评论 -
cf contest2 B
http://codeforces.com/problemset/problem/2/B求从左上角到右下角所经过的数字之积末尾所含0最小的个数10=2*5dp[i][j][0]代表走到i,j位置,所得2的最小和,dp[i][j][1]代表走到i,j位置,所得5的最小和,最后得到的最小个数是min(dp[n][n][0],dp[n][n][1]);还要原创 2015-06-11 20:43:34 · 342 阅读 · 0 评论 -
cf 553A 排列组合
题意 k种颜色,第i种颜色Ci个balls求第i种颜色的最后一颗球必须在第i+1种颜色的最后一颗球之前数学排列组合公式C(n,m)=C(n-1,m)+C(n-1,m-1)思路:总的球数为sum,球数为a[i]从当前最后一种颜色思考,这种颜色的最后一颗球必须放在最后一个位置将这种颜色放好后还剩sum-1颗球,这种颜色的球还剩a[i]-1那么对于这a[i]-1颗球,就放原创 2015-07-10 00:06:43 · 1172 阅读 · 0 评论 -
dp cf264B
http://codeforces.com/problemset/problem/264/B这道题没做出来,后来看了题解,好机智,我还是要继续加油写dp!题目要求求出最长的相邻两数不互质的最长的严格上升数列的长度对于素数的处理又get到了新技能for(int i = 2; iif(!a[i]) for(int j = i; j for(int i = 2;iif(!原创 2015-06-12 12:26:08 · 352 阅读 · 0 评论 -
cf 543A 完全背包
http://blog.csdn.net/slowlight93/article/details/45578197原文连接cf 543Ahttp://codeforces.com/problemset/problem/543/A首先考虑最直接的三维方程 dp(i, j, k) 表示前i个程序员写了j行代码bug不超过k dp(i,j,k)=∑dp(i−1,j−r,k−r∗a[i])转载 2015-06-14 01:46:27 · 453 阅读 · 0 评论 -
dp cf C. Mr. Kitayuta, the Treasure Hunter
链接http://codeforces.com/problemset/problem/505/C题意:First, he will jump from island 0 to island d.After that, he will continue jumping according to the following rule. Let l be the length o原创 2015-07-13 18:24:24 · 620 阅读 · 0 评论 -
dp cf B. Maximum Submatrix 2
链接:http://codeforces.com/problemset/problem/375/B#include 可以改变行的位置,求最大的矩形的大小(1的个数,且矩形中只能有1)思路:用hash处理ans[nmax][nmax]先记录每行连续的1的位置然后转移方程dp[i][j]表示第i列至第j列中有连续的1的行的个数i >= 1:dp[i][j]+=dp[i-1][j原创 2015-07-14 19:46:52 · 379 阅读 · 0 评论 -
cf dp B. Maximum Submatrix 2
链接:http://codeforces.com/problemset/problem/255/C求为p,p-q,p,p-q.....这样的数列的最大长度没有想出来方程,然后看了别人的方程是dp[i][j]=dp[last][i]+1方程就不解释了,==弄那个last一直弄错了,wa了看了代码才知道那个last怎么弄代码:#include #include #inclu原创 2015-07-14 19:56:32 · 515 阅读 · 0 评论 -
cf div2 558题解报告
第三次做cf,以后继续加油A:模拟,计算出0的左右两侧的个数和值,然后比较两侧个数的大小即可#include #include #include #include #include using namespace std;#define MAX 100005#define MOD 1e7int ans[MAX*4];long long l[MAX+5];long l原创 2015-07-15 14:26:14 · 320 阅读 · 0 评论 -
dp 专题
一大波的dp题目,算是总结一下基础dp1.hdu 1284背包问题有1,2,3三种硬币,给你数字求它的兑换方法硬币可以无限取,背包问题/********************************************Author :CrystalCreated Time :File Name :*****************原创 2015-08-09 01:48:19 · 400 阅读 · 0 评论 -
状压DP LIGHTOJ 1194 Colored T-Shirts
给你一串序列,求让这个序列相同的数字放在一起的最少交换次数序列中的数字范围1-16序列中数字个数1-1e5思路:首先要预处理 cnt[i][j] 表示数字j放在数字i前所要用到的交换次数然后枚举每种情况1比如:m个零000000000 第i个位置为0,表示此时数字i是乱序的,反之是放好的代码如下/*********************************原创 2015-08-10 19:52:59 · 686 阅读 · 0 评论 -
UVA 记忆化搜索状压dp 1252
记忆化 搜索,题目要求求要猜出每个物体所需要的最小次数开始理解错题意了,弄成一次性猜出所有的物体其实是求猜出每个物体的次数中的最大次数//dp[s][b]//s : 代表此时询问过的集合//b : 代表此时所要猜到的物体w,在集合s中所具有的特征#include #include #include #include #include #include原创 2015-08-26 11:23:58 · 398 阅读 · 0 评论 -
树形DP入门题 cf 161D
题意:给你一棵树,让你求树上有多少点之间的距离是为k思路距离为k的个数为cntdp[i][j]:距离i点距离为j的点的个数son 为i儿子cnt += dp[i][j] * dp[son][k-j-1]dp[i][j] += dp[son][j-1]初始化dp[i][0]=1;/****************************************原创 2015-08-31 19:10:08 · 493 阅读 · 0 评论 -
DP UVA 1347
一开始看题不知道如何下手想到了dp[i][j]的状态,但是转移方程不知道如何建立dp[i][j] 1到max(i,j)的点全部都经过,并且只有一次小白书上说可以给一个i>j的限制条件这样就有一点点思路了下面我们来看看dp[i][j]这个状态可以由什么状态得来1:如果i与j之间差1,即是dp[i][i-1]如果只让其中一个人走的,前面的状态中一定有个人是i或者是i-1原创 2015-08-31 23:57:56 · 261 阅读 · 0 评论 -
DP ACdream 喵哈哈村的挑衅
心塞,记忆化搜索教做人,第一次见写了一早上的dp,都没把转移方程写对/********************************************Author :CrystalCreated Time :File Name :********************************************/#include #i原创 2015-08-05 15:59:59 · 501 阅读 · 0 评论 -
codeforces Devu and Flowers 母函数 容斥 dp
一种做法没见过一种做法脑洞太大,没想到做法1:容斥+费马小定理+lucas+壮压dp前面都是套路,难的是壮压dp的状态这道题倒着想将个数为s的相同的球放入n个盒子中有多少中放法(盒子不同,盒子里面可以为空如果我们不考虑盒子球的个数限制 那么答案就是c(s+n-1,n-1)(解释一下如果盒子可以为空的时候,我们假设当前盒子每个里面有一个,最后我们每个盒子减去一个就行了原创 2016-06-16 23:21:09 · 506 阅读 · 0 评论