
re0 dp
文章平均质量分 52
believe_what
真是个无奈的故事呢。。。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
P1719最大加权矩阵
题目链接:https://www.luogu.org/problemnew/show/P1719 这道题目关键在于将维度的技巧。若最大子矩阵从(i,j)到(i1,j1),可以将他们的同列加起来变成一维{(a(i,j)+a(i,j+1)+...+a(i,j1)),...,a(i1,j)+...a(i1,j1)}。然后再求最大子段问题(dp[i]=max(dp[i-1]+sum[i],sum[i])原创 2017-12-19 19:42:56 · 535 阅读 · 0 评论 -
P1387 dp入门
原题链接:https://www.luogu.org/problemnew/show/P1387 用两个数组进行预处理le[i][j]表示从i,j向左延伸最大的边长up[i][j]表示向上延伸的最大边长然后枚举每一个点再枚举(i,j)到(i-temp,j)temp为当前枚举到的最短边长。复杂度为O(n^3) #include #include #include #include #in原创 2017-12-19 20:24:25 · 186 阅读 · 0 评论 -
P2679子串(dp)
题目链接:https://www.luogu.org/problemnew/show/2679 这题目有四个状态dp[2][i][j][k]首先第一个状态1表示选取a[i],0表示不考虑选不选然后i表示已扫过a字符串的前i个元素j表示构造了前j个b子串k表示有k组子串构造而成于是状态转移方程为:dp[1][i][j][k]=(dp[1][i-1][j-1][k]+dp[0][i-1][j-1][原创 2017-12-20 23:02:25 · 330 阅读 · 0 评论 -
P1220 关路灯(区间dp)
这题目想了很有一段时间,最后发现关一个区间的路灯最后的位置要么在最左端要么在最右端,只有两种状态所以建立状态,[i,j]表示这个区间的路灯最小消耗,0代表在最左端,1代表在最右端。这题目还有个坑点不能用while(scanf("%d%d",&n,&s)==2)一直90分最后看别人的把while去了就过了。。。汗颜。。。 状态方程式dp[j][i][0]=min(dp[j+1][i][0]+(x[原创 2018-01-01 12:46:36 · 312 阅读 · 0 评论 -
P1156 垃圾陷阱
题目链接:https://www.luogu.org/problemnew/show/P1156 设置状态dp[h]=f,h为高度,f为最大生命值,dp[h]只需要记录所吸收的营养(不考虑消耗),dp[h]>t则状态有效。状态转移方程:dp[j+a[i].h]=max(dp[j+a[i].h],dp[j]),dp[j]+=a[i].f 代码如下: #include #include #i原创 2018-01-01 14:08:28 · 386 阅读 · 0 评论 -
P1970花匠
题目链接:https://www.luogu.org/problemnew/show/1970 方程状态还算蛮好想的,dp[i][0]表示在i出上升dp[i][1]表示在i处下降直接得到状态转移方程if(a[i]>a[i-1]) dp[i][0]=dp[i-1][1]+1;if(a[i] #include #include #include #include #include #in原创 2017-12-27 19:32:27 · 362 阅读 · 1 评论 -
树的直径(树形dp)
设置状态dp[u][2] dp[u][0]表示距离u的最长距离,dp[u][1]表示距离u的次长距离(与最长距离的节点不在同一颗子树上)然后状态方程为 ans=(ans,dp[u][0]+dp[u][1])ans为树的直径答案 #include #include #include #include #include #include using namespace std; co原创 2018-01-21 20:39:15 · 2335 阅读 · 0 评论 -
P3478 [POI2008]STA-Station(sta树 树形dp)
典型的sta树 得出状态方程dp[u]为将u设置为根节点的全部度数和相加,方程dp[v]=dp[u]+n-2*num[v](num[v]指的是以v为根节点的子树的节点数) 代码: #include #include #include #include #include #include using namespace std; const int maxn=2000100; ty原创 2018-01-21 21:43:45 · 375 阅读 · 0 评论 -
SGU 143.Long Live the Queen(女王万岁)
先确定一个根节点,然后dp[u]表示一定取u的联通块的最大点权和 dp[u]=1+∑dp[v](v是u的孩子并且dp[v]大于0) 代码: #include #include #include #include #include #include using namespace std; const int maxn=210000; int head[maxn]={},next[原创 2018-01-21 22:25:13 · 405 阅读 · 0 评论