dp专栏
一些oj上dp的题~也是 一个总结
mars_ch
。。
展开
-
bzoj 1131 [POI2008]Sta
Description给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大Input给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.Output输出你所找到的点,如果具有多个解,请输出编号最小的那个.Sample Input81 45 64 56 76 82 43 4 Sample Output7据说是裸的树形dp转移很明显但是想了会加加减减。。所以 大概原创 2016-11-12 23:28:15 · 421 阅读 · 0 评论 -
noip 2010 乌龟棋
很水的dp。 四位就够。#include<cstdio>#include<algorithm>#include<cstring>#define int long long //by mars_chusing namespace std;int n,m;int a[355];int num[5];int f[45][45][45][45];signed main(){原创 2016-11-07 00:21:38 · 545 阅读 · 0 评论 -
bzoj 2431[HAOI] 逆序对数列
好吧。。这题好久之前做的了,拿出来再瞧一遍。让求1-n数列的排列中 逆序对数量为k的 数列个数。dp状态转移从一半想比较好想。在0-i-1中插入i 有可能造成 0-i-1个逆序对所以f[i][j]=Σ(f[i-1][k])j-i+1=#include<cstdio>#include<algorithm>#include<cstring>//by mars_chusing namesp原创 2016-10-13 21:17:35 · 518 阅读 · 0 评论 -
poj 3267 the cow lexicon
戳这里原题大致题意:给你w个单词和长度为l的字符串,问在字符串中删除多少个字符可以使其匹配到单词序列。嗯然后是dp。开dp[i]记录在第i位及之前要删除多少字符,已知找到dp[i],初始状态dp【l】=0,然后从后往前扫输入的字符串。这个时候,dp方程有两种 : dp【i】=dp【i+1】+1;(不能匹配) 和 dp【i】=min(dp【i】,dp[pm]+(pm-i)+len);第一个方程原创 2016-03-04 00:19:50 · 300 阅读 · 0 评论 -
poj 1260 dp
poj 1260Pearls 大致题意:现在有很多按品质升序排列,当然价格也是,的不同种类的珠宝。为防止只够买一个,顾客需要买所需个数再额外加10个。也可以将这些珠宝升级品质,看是否可以省钱,问你买这么多数量的珠宝最少花多少钱。 输入 第一行:几个cases 第一个case 第一行:珠宝种类n种,接下来n行,是目标购买个数和单价。 输出:最少花的钱 example: Input: 2原创 2016-03-05 23:15:13 · 515 阅读 · 0 评论 -
poj 1276 多重背包+二进制
这个就是个提醒二进制的。直接看码吧。#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){ int cash, n; int c[100], f[100005]; int i, j, k; int num, co原创 2016-03-06 19:37:38 · 419 阅读 · 0 评论 -
poj 2533 dp
题意:找最大上升子序列个数,lis戳这里原题经典dp,又是鬼畜的output limited error【醉#include<cstdio>#include<algorithm>#include<cstring>#define maxn 1001using namespace std;int in[maxn];int dp[maxn];int n,i,j;int main(){原创 2016-03-06 20:40:02 · 364 阅读 · 0 评论 -
poj 3176 dp
poj 3176 dp戳这原题大致题意:给你个数字金字塔,每个点带权值,每个点只可以选上一行相邻的2个点【表述就是这么个意思】,问最长路径值啊思路: of course dp。 这题写的还算顺手啊。事实证明,题是刷熟练的orz。 dp[i][j]表示最长路径,从下往上刷,所以方程: dp[i][j]=map[i][j]+max(dp[i+1][j],dp[i+1][j+1]); 啦啦啦#i原创 2016-03-06 21:30:43 · 501 阅读 · 2 评论 -
poj 1014 dividing
戳这里原题1014大致题意: 有六种价值分别为1-6的矿石..各有num [ i ] 个…问两个人能否分得同样多价值的矿石 。 多重背包加二进制优化的方法。貌似还有纯dp和dfs有待探究。首先很明显如果总价值为0,或者是奇数,那显然不能均分。 剩下如果是偶数,用多重背包,dp[j]记录能装价值为j的石头时,可装的最大价值。还有二进制优化喽。#include<cstdio>#include<原创 2016-03-13 16:44:33 · 389 阅读 · 0 评论 -
poj 1160 Post Offices(经典dp)
题目: poj 1160 题意:给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近。分析: 这道题。很经典的dpdp[i][j]表示建第i个邮局,覆盖到第j个村庄的距离之和。问题在于状态方程怎么写?dp[i][j]=min(dp[i][j],dp[i-1][k]+dis[k+1][j]) 意思就是建了i个邮局管辖1-j个村庄,或者建i-1个邮局管辖1-原创 2016-05-07 16:56:25 · 1669 阅读 · 0 评论 -
poj 上的dp 留着慢慢写
红色表示已经A。打星号的表示个人认为比较经典,或是算法比较好的题目1014* Dividing 半个背包,注意中断,否则可能TLE1036 Gangsters 可以很水的DP过,还有多种优化的方法1038* Bugs Integrated, Inc.状态压缩1050 To the Max最大子矩形 枚举每个列数为n的矩阵,然后对这些矩阵分别进行DP处理1080 Human Gene Func转载 2016-05-08 16:34:28 · 503 阅读 · 0 评论 -
poj 1036
题目: 戳原题题意: N 个盗贼去一个饭店,第i个盗贼在Ti时间来,他拥有Pi的财富。这个饭店的门有K+1种开放的状态,用[0,K]表示。这些状态能够被一个盗贼改变在一个时间单位内,要么把它打开,要么把它关闭,或者就是维持原状。在初始时刻这些门都是关闭着的。第i个盗贼进入了饭店仅当这个门是专门为他所开放的时候,也就是说这个门的状态与他的坚强程度Si一致的时候。当盗贼来到饭店的这一刻,如果开放的原创 2016-05-08 22:05:48 · 812 阅读 · 0 评论 -
poj 3230 Travel
题目: 戳题意: 有n个城市,一个人要在m天内travel 这n个城市。他每天在一个城市 要得到一个income 但是从一个城市到另一个城市也要有cost 如果呆在一个城市 也就是在矩阵中的从i到i表示呆在这个城市的cost nm 都小于100 然后给出n*n的矩阵 cost cost[i][j]表示的是从i到j的花费 然后一个m*n的矩阵 income[i][j]表示第i天在城市j得到的钱原创 2016-05-09 21:36:49 · 2133 阅读 · 2 评论 -
poj 1080
题目: 戳题意: 不复制了。。。大家自己找吧。。分析:他是一到dp。然后,我完全不知道dp方程长什么样子。。。说是跟最长公共子序列有关系。那就是:s1[i]=s2[j] dp[i][j]+1 一类神马的。那你想啊: 这是要计分啊。所以把它加上分数不就好了吗。dp方程建 代码。。dp题还是要多写啊。。#include<cstdio>#include<algorithm>#include<原创 2016-05-12 21:47:41 · 597 阅读 · 3 评论 -
poj 1159 Palindrome
题目: 戳题目:就是让你求,给的字符串最少添多少个字符,使它成为回文子串。分析:这是一道dp呀 dp最正常也是最简单的思路是:f[i][j]表示 i-j 最少要添加的。然后就是从网上 看到的。。一个ppt 讲的超级详细。。。。虽然 朕 没看懂。戳然后,粘朕的代码。你瞧啊,只有 30行。 另外 这道题 如果不用 滚动数组 就可以开short 的 可以过滚动数组 会节约原创 2016-05-13 17:47:11 · 219 阅读 · 0 评论 -
poj 3254
题目: 戳题意: 有n*m大的一个地方,1表示土地肥沃可以种植物,0表示不能种植物,问:在不许有两个植物相邻的情况下,有多少种放置的方法。 分析:直接dp因为状态较多,数组很难直接表示出来,我们采用二进制状态压缩的方法来解决问题。分析: 第一道 状压dp 题哦!所以先做好准备工作:–位运算 tata~ 我自己整理了一丢丢 & 与 同为1为1 or 为0| 或 同0为0 or 为1^ 异原创 2016-05-14 18:45:56 · 260 阅读 · 0 评论 -
poj 2342 anniversary party
题目: poj tyvj -> -> 这个是中文的哦!! 看这个吧 但是数据范围是一半 所以交还是要去是poj 的题意: 略分析: 这是朕的第一道树形dp 。 如上,我们可以把他们的关系 建成一个 树形图然后进行树形dp 树形dp的方程 没 啥。 看代码吧:#include<cstdio>#include<algorithm>#include<cstring>u原创 2016-05-26 20:17:14 · 234 阅读 · 0 评论 -
poj 1636 好题》
题意:两个人数一样的监狱,有一些囚犯不能在一起,两个监狱要等数量(#include<cstdio>#include<algorithm>#include<cstring>#include<vector>//by mars_chusing namespace std;int t;int m,r;vector<int> G[505];int vis[505],q[505],p[505]原创 2016-11-03 09:03:13 · 770 阅读 · 0 评论 -
poj 1682 dp好题 +图片 题解 敲详细
状态转移并不是很难。 但是要考虑的东西还是挺多的推荐一位神犇博客 顶题意: 题意:有三个相互隔离的河岸X,Y,Z,每个岸上分别有n,m,p个部落,每个河岸上的部落之间是敌对的(即同一个河岸上的部落之间不能连通),然而,位于不同河岸上的任意两个部落之间都是友好的,现在请你在部落之间搭建桥梁(不能交叉),每座桥的费用是两部落的海拔差的绝对值,求:使得每一个部落都能与至少一个他的友好部落连通 的桥的原创 2016-11-03 11:53:39 · 433 阅读 · 0 评论