![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
After__rain
这个作者很懒,什么都没留下…
展开
-
luogu P3842 [TJOI2007]线段
有一个比较显然的东西,就是你不管当前段走到哪里,你下一行总是要走回去也就是说,我们不管走到哪里,与 当前到左右端点是等效的然后就推出下面那个毒瘤式子就好了。。。推荐画图来讨论情况(一屏幕的式子(光速逃 ))有点像那个关路灯(似乎是那题的弱化版)#include<bits/stdc++.h>#define MAXN 20005using namespace std;in...原创 2020-03-29 13:05:34 · 94 阅读 · 0 评论 -
luoguP3572 [POI2014]PTA-Little Bird
比较真的单调队列优化dp的题目额,这个东西吗纠正了我的一个观点。。。你单调队列维护的并不是最大值,最小值,而是一个最优的状态然后来转移。。。。。然后就这样了(难怪我说今年CSPD2T2我怎么想不出来。。。(我太弱了))#include<bits/stdc++.h>#define MAXN 1000005using namespace std;int n,cishu,k...原创 2020-03-28 18:01:16 · 128 阅读 · 0 评论 -
Plan
其实也没什么好计划的。。。。把黑书的题刷一下吧。。。。。(太弱了,能做多少做多少(吴文虎那个老毒瘤 )))原创 2020-03-28 00:15:40 · 98 阅读 · 0 评论 -
单调队列优化多重背包
。。。。没什么好说的。。。。b站上有个视频。。不对方程经过处理,就直接丢到单调队列里面去了。。。。我想到现在也没想明白他怎么做到的。。。说正经的。。。本质上是找到方程间的联系性,然后再改写方程。。。然后再进行的单调队列(思维难度在哪里。。。(不过似乎只理解都加上一个数就不难?))然后就没有了#include<bits/stdc++.h>#define MAXN 20005...原创 2020-03-27 21:56:52 · 110 阅读 · 0 评论 -
Codeforces Round #627 (Div. 3)E. Sleeping Schedule
比较水的dp吧。。f(i,j)前i次,当前在j点睡醒。。好像是f(i,j)前i次,当前在j点睡醒。。好像是f(i,j)前i次,当前在j点睡醒。。好像是f(i,j)=max(f(i−1,j−ai),f(i−1,j−ai+1))+[l<=j<=r]f(i,j) = max(f(i - 1 , j - ai),f(i - 1, j-ai+1)) + [l<=j<=r]...原创 2020-03-15 23:17:16 · 86 阅读 · 0 评论 -
luoguP5664 Emiya 家今天的饭
考虑维护一个差值每次枚举是那个食材爆炸。。。然后就ok了嘛,建议看题解这个题。。。#include<bits/stdc++.h>using namespace std;long long n,m,mod = 998244353;long long a[105][2005],s[105],f[205][205],sum;void init(){ memset(f,0,...原创 2020-03-14 15:14:44 · 127 阅读 · 0 评论 -
luoguP1169 [ZJOI2007]棋盘制作
悬线法dp秒杀。。。#include<bits/stdc++.h>#define MAXN 2000 using namespace std;int n,m,ans1,ans2;int num[MAXN+5][MAXN+5],l[MAXN+5][MAXN+5],r[MAXN+5][MAXN+5],up[MAXN+5][MAXN+5];void init(){ cin&...原创 2020-03-14 13:38:10 · 124 阅读 · 0 评论 -
luoguP1273 有线电视网
很显然吧,直接做树形dp两维以什么为根的子树选择多少个用户所能得到的最大价值注意 中转站不算直接在转移的时候维护一下就好了#include<bits/stdc++.h>#define MAXN 3000using namespace std;//f[i][j]以i为根的子树选取j个用户的最大利润//f[i][j] = max(f[i][j] , f[i][k]+...原创 2020-03-14 13:37:12 · 127 阅读 · 0 评论 -
luoguP1156 垃圾陷阱
一个假的 滚动数组背包。。。维护一下每个高度所能有的最大生命。。。。然后维护上去就好了不然你也可以尝试一下维护每个生命所能到达的最大高度。。。都挺好做的#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int d,g;int maxl;str...原创 2020-03-14 13:33:19 · 124 阅读 · 0 评论 -
luoguP1373 小a和uim之大逃离
嘛,这个题是我一年前做的。。。。嘛,你第一看可能发现,他题目要求是在任意点结束,使得两者溶液质量相同。。。很难维护对吧,因为你要同时维护两者的溶液质量。。。。但实际上。。。。两者溶液的多少与两者质量是否相同没什么关系的就是说,我们可以直接维护差值。。。。但他会出现负数? 其实也没什么问题。。。因为这个是在模意义下的负数,可以直接转换为非负数仔细模拟一下这里,很容易理解然后这题就AC...原创 2020-03-14 13:26:53 · 110 阅读 · 0 评论 -
luoguP1005 矩阵取数游戏
是区间dp的扩展,相当于就做了n次,因为上下层没有关系。。。然后对于每次取走要乘上的那个2.。直接考虑再区间dp的时候,把之前的转移整体乘2就好了。。。。转移很简单吧。。。// luogu-judger-enable-o2#include<cstdio>#include<iostream>#include<algorithm>using name...原创 2020-03-14 13:18:09 · 119 阅读 · 0 评论 -
luogu P2331 [SCOI2005]最大子矩阵
我一开始想错了。。。结果20分钟就过去了正解是直接维护上下两层。。。。然后直接转移就好了(讲道理 我没看题解。。。。)不过感觉最近题解看的有点多。。。。。主要原因是细节+实现能力有点跟不上了把?可能要想办法。。。。。啊。。。。就是那种写起代码缺少了自己的灵魂的那种感觉。。。。。。#include<bits/stdc++.h>#define MAXN 105using ...原创 2020-03-06 14:24:40 · 154 阅读 · 0 评论 -
luoguP2216 [HAOI2007]理想的正方形
直接倍增或者单调队列直接搞就好了吧。。。。没什么思维虽然我就写了个滚动数组(数据太水了吧。。。。)#include<bits/stdc++.h>#define MAXN 1000using namespace std;int a,b,n;long long f[MAXN+5][MAXN+5][3],g[MAXN+5][MAXN+5][3],ans=999999999;//...原创 2020-03-06 14:20:16 · 122 阅读 · 0 评论 -
luoguP2157 [SDOI2009]学校食堂
小小的状压dp直接考虑维护一个f(i,j,s)前i−1菜已经搞定了。。。。上一次的菜是j位置,i到i+b[i]的选没选状态是sf(i,j,s)前i-1菜已经搞定了。。。。上一次的菜是j位置,i到i+b[i]的选没选状态是sf(i,j,s)前i−1菜已经搞定了。。。。上一次的菜是j位置,i到i+b[i]的选没选状态是s然后直接转移就好啦。。。。过水不过细节比较多。。。比较难写?#inc...原创 2020-03-06 14:18:54 · 93 阅读 · 0 评论 -
luoguP1415 拆分数列
比较好的dp题但是被我几下口头ac了,然后还是正解。。。。。。嘛,首先那个最小化很麻烦,怎么办呢做掉!直接把最小的给dp出来。。。具体转移如下。。。。f(i,j)前i位,最近一次起点是jf(i,j)前i位,最近一次起点是jf(i,j)前i位,最近一次起点是j显然直接转移有:f(i,j)=min(f(i,j),num(i,j)[num(i,j)>f(j,k)])f(i,j...原创 2020-03-01 22:34:48 · 113 阅读 · 0 评论 -
luoguP1070 道路游戏
比较好的dp。。。dp方程被我一眼想出来。。。。我偷瞄一下题解。。。。发现还是对的。。。。自己看 代码。。。。总体复杂度有O(N3)O(N^3)O(N3)这个要优化的话,可以套个优先/单调队列优化成O(N2)O(N^2)O(N2)#include<bits/stdc++.h>using namespace std;int n,m,p,gd[1005][100...原创 2020-03-01 12:19:40 · 90 阅读 · 0 评论 -
洛谷P2577 [ZJOI2005]午餐
这个题比较好。。。。好像被我20分钟秒了???然而颓了一会炉石后。。。9点18分才打出来。。。。单独考虑一个窗口,发现答案为:MAX(sum[p−1]+cost[p])(sum[k]为1至k领饭时间之和)MAX(sum[p-1]+cost[p])(sum[k]为1至k领饭时间之和)MAX(sum[p−1]+cost[p])(sum[k]为1至k领饭时间之和)然后发现,要使得答案最大,不...原创 2020-02-29 21:27:45 · 150 阅读 · 0 评论 -
acwing 4. 多重背包问题 I
#include<bits/stdc++.h>using namespace std;long long n,m,f[1000005],sum=0,g=0,w[1000005],v[1000005],c[1000005];bool judge=false;//¿¼ÂÇÒ»²¨¶þ½øÖƲð·Öint main(){ cin>>n>>m;...原创 2019-12-20 20:30:34 · 567 阅读 · 0 评论