![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
文章平均质量分 58
DreamDraw_Pan
这个作者很懒,什么都没留下…
展开
-
Codevs 线段覆盖1&2&3&4&5
对于线段覆盖1、3,贪心,每次选取末端点靠前的,O(n)扫一遍即可(话说这个题似乎排序最占时间)。(当然DP也可以)#include#include#define maxn 1000000+5using namespace std;struct line{ int b,e; friend bool operator < (line x,line y){ if(x.e!=y.e)re原创 2016-11-04 21:21:51 · 440 阅读 · 0 评论 -
洛谷P1108 低价购买
第一问就是最长下降子序列,n^2暴力即可,设dp1[I]表示到i为止的最长下降子序列的长度,关键是第二问设dp2[i]为到i为止的最长下降子序列的方案数,易得dp2[I]=sum(dp2[j]|a[j]>a[I]&&j上面方程的意思是,如果有j但是有重复的方案,需要改进。观察可得一条性质:如果j#include#include#define maxn 5000+10i原创 2016-10-28 22:14:45 · 294 阅读 · 0 评论 -
洛谷P1052&NOIP2005 过河
(此题srz大神评价为玄学题坐标离散化+特判1)当s!=t时,由于桥很长而石头很少,所以青蛙跳很久才会跳到一个点,由于s!=t,所以青蛙跳j的距离的方案数为(j/(t-s))!种,可以认为青蛙一定有一种方案能跳过这个石头;事实上,当两块石头之间的距离>lcm(s,t)时,青蛙就可以随便跳了,所以可以将每个石头之间的距离取一下模,至于我的程序里为什么模105,谁知道呢。。反正能A。。玄学原创 2016-10-28 21:49:19 · 391 阅读 · 0 评论 -
洛谷P1026&NOIP2001 统计单词个数
刚看到这个题一直在纠结怎么划分成k份再转移,事实证明我想多了先预处理出数组w[I][j],表示从i到j的单词个数,如果有多个以i开头的单词,只统计一次即可dp[I][j]表示从0到i划分成j份,则dp[I][j]=max(dp[k][j-1]+w[k+1][j]|j-1#include#include#include#define f dp#define maxn原创 2016-10-28 21:38:11 · 494 阅读 · 0 评论 -
洛谷P1005&NOIP2007 矩阵取数游戏
(抄的高精度模板233由于要取完所有的数,所以原题可转化为在每一行上取数,累加所有行的答案即可f[k][I][j]表示在第k行从1取到I,从j取到m的答案f[k][I][j]=max(f[k][I-1][j]+2^(m-j+i-1)*a[k][I-1],f[k][i][j+1]+2^(m-j+i-1)*a[k][j+1])(第一次写把a[k][I-1]习惯性地写成了a[I-1][j原创 2016-10-28 20:45:38 · 367 阅读 · 0 评论 -
洛谷P1006&NOIP2008 传纸条
初见此题有点蒙蔽,然而可以发现n,m来回两次可以等效成同时传两个纸条,f[a][b][c][d]=max(f[a-1][b][c-1][d],f[a-1][b][c][d-1]),f[a][b-1][c][d-1],f[a][b-1][c-1][d])+g[a][b]+g[c][d];#include#include#includeusing原创 2016-10-28 20:40:17 · 317 阅读 · 0 评论 -
洛谷P14341 滑雪
好怀念。。第一道自己AC的DP记忆化搜索(好久以前写的有点难看见谅233#include#include#define maxn 1005using namespace std;int m,n,G[maxn][maxn],dp[maxn][maxn];bool vis[maxn][maxn];const int mx[4]={1,-1,0,0};const int my[原创 2016-10-28 20:37:45 · 325 阅读 · 0 评论 -
洛谷P1880 石子合并
好久才明白这个题和堆石子那个贪心的区别,汗。。。设f[i][j]表示从i到j合并的总答案,易得f[i][j]=max/min(f[I][k]+f[k+1][j]+sum[j]-sum[I-1]|I注意这个题是环形#include#include#define maxn 105 using namespace std;int a[maxn],n,s[(ma原创 2016-10-28 20:20:56 · 390 阅读 · 1 评论 -
洛谷P1057&CodevsP1148 传球游戏
(由于不怎么会写环形DP,特水此题记忆化搜索f[i][j]=f(i-1,j-1)+f(i+1,j-1)当i当i>=n时,i%=n;写记忆化搜索很坑爹的一个问题,如果直接把dp数组当作vis来用的话会死循环,因为可能没有方案,因此dp数组全都是0#-_-#include#include#define f dp#define maxn 30+5i原创 2016-10-28 20:02:53 · 264 阅读 · 0 评论 -
洛谷P1156 垃圾陷阱
果然喜欢把简单的题想复杂呵呵01背包f[I][j]表示使用完第I个垃圾,高度为j时的最大剩余生命值,因为同一高度生命值越多越优转移显然但是此题坑很多。。特别要注意在每个垃圾下落之前,判断所剩生命值减去此垃圾与上一个垃圾的间隔是否大于等于0.#include#include#include#define dp f#define maxn 100+5#define max原创 2016-10-28 22:20:15 · 267 阅读 · 0 评论