
简单dp
文章平均质量分 54
HARD_UNDERSTAND
Just try
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
nyoj 1070 诡异的电梯 简单dp
题目: 新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里, 为了节约学生的时间也为了鼓励学生锻炼身体, 所以规定该宿舍楼里的电梯在相邻的两层之间是不会连续停下(即,如果在第2层停下就不能在第3层停下。).所以,如果有学生在相邻的两层之间要停下, 则其中的一部分学生必须选择走楼梯来代替。规定:一个人走下一层楼梯的花费为A,走上一层楼梯的原创 2016-03-21 21:35:15 · 456 阅读 · 0 评论 -
UVa 10564 沙漏里的路径(背包思想)
题目:http://acm.hust.edu.cn/vjudge/contest/129795#problem/Q 题意: 要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为Sum。问有多少条路径之和刚好等于Sum? 如果有的话,输出起点编号最小且字典序最小的路径。分析: 一道类似01背包的题目,Sum相当于是背包容量,状态表示很容易想到: f[i][j][S]表示从原创 2016-09-04 22:15:34 · 352 阅读 · 0 评论 -
LA 4731 蜂窝网络(简单dp+贪心)
题意: 手机在蜂窝网络中的定位是一个基本问题,假设蜂窝网络已经得知手机处于c1,c2,,,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机,但这样做很浪费带宽,由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的办法就是把这些区域分成w组,然后依次访问,求最小的访问区域数的期望值。比如,已知手机可能位于5个区域,概率分别是0.3 0.05 0.1 0.3 0.25,w=2,原创 2016-09-05 10:23:40 · 785 阅读 · 0 评论 -
UVa 11584 划分回文串( 简单dp )
题意: 给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。分析: d[i]表示以i结尾的串最少可以分割的串数。 d[i] = min{ d[j]+1, 串[j,i]是回文串&&1<=j<=i } 这题还是很简单的,不过值得学习的地方是预处理[i,j]是否为回文串那部分,代码给出了两种预处理方法。代码:#include<iostream>原创 2016-09-05 10:40:02 · 409 阅读 · 0 评论 -
Codeforces 721C Journey (简单dp,dfs)
题目:http://codeforces.com/contest/721/problem/C 题意: 一个DAG图有n个点,m条边,走过1条边花费w个时间单位,总共有T时间,问从1到n最多可以经过多少个点?分析: dp[u][k]表示到u点,已经经过了k个点,还剩下的时间 转移的话在图上搜一遍 担心会超时,可是没有。因为状态最多有n*n个。代码:#include<bits/原创 2016-11-03 19:49:21 · 462 阅读 · 0 评论 -
Codeforces 652C Foe Pairs 【dp】
C. Foe Pairstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a permutation p of length n. Also you are given m foe pairs (ai, b原创 2016-04-13 22:06:26 · 771 阅读 · 0 评论 -
UVa 1471 防线 set/LIS
题意:给出长度为n的序列,要求你删除掉一段的连续子序列,使得剩下的序列的递增子序列最长 分析: 书上讲解的很详细,摘一段: 最容易想到的算法是枚举j和i(前提是A[j]< A[i],否则拼不起来),然后分别往左和往 右数一数最远能延伸到哪里。枚举量为O(n2),而“数一数”的时间复杂度为O(n),因此总时间 复杂度为O(n3)。 加上一个预处理,就能避免“数一数”这个过程,从而把时间复杂度降原创 2016-05-16 19:39:06 · 373 阅读 · 0 评论 -
UVa 11324 最大团(强连通分量+dp最长路)
题意: 给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。分析: 同一个强连通分量中的点要么都选,要么不选。把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它的结点数,则题目转化为求SCC图上权最大的路径。所以转化成了dp求DAG上的最长路。代码:using nam原创 2016-10-02 22:15:24 · 622 阅读 · 0 评论 -
poj 几道简单的dp题
题目:poj 1836题意: 求使数列程先递增后递减的形式需要去掉的数字个数。当然也可以直接递减或者只递减不递增。 分析: 用最长递增子序列的方法求,然后枚举两个起点的位置即可。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF=1e8;const int N=10原创 2016-07-19 10:19:34 · 1844 阅读 · 0 评论 -
hihoCoder [Offer收割]编程练习赛8【数论,dfs,dp,容斥】
题目:http://hihocoder.com/contest/offers8/problems【我只是简单地mark一下,看详细题解的请戳这里】A题肯定L和D的最大公因数肯定是循环节,然后直接暴力模拟即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() { int T; sc原创 2017-03-07 19:43:27 · 458 阅读 · 0 评论 -
51nod 1670 打怪兽 【递推】
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1670题意:lyk在玩一个叫做“打怪兽”的游戏。 游戏的规则是这样的。 lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>=怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。 若怪兽全部打完,游戏也将会结束。原创 2017-03-21 16:37:08 · 458 阅读 · 0 评论 -
hdu 4055 Number String【递推】
题目http://acm.hdu.edu.cn/showproblem.php?pid=4055题意给一个n,求n个高矮不同的人排成一排使得高、矮依次排列的种数。分析定义dp[i][j]表示在这个排列中第i个数字以j结尾的,满足条件的子排列有多少个。如果第i个字符是‘I’,那么明显可以得到dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+……+dp[i-1][1]。如果第i个字符原创 2017-08-26 22:33:05 · 238 阅读 · 0 评论 -
hdu 4489 The King’s Ups and Downs【递推】
题目http://acm.hdu.edu.cn/showproblem.php?pid=4489题意给一个n,求n个高矮不同的人排成一排使得高、矮依次排列的种数。分析我们不妨把n个人的身高设为1~n, 然后从低到高插入队列。 那么将第i个人插入队列的时候就出现了问题, 插入的这个位置需要满足前面两个是高低, 后面两个是低高。所以我们用DP来记录。 用d[i][0] 表示i个人的队列, 结尾为高低的方原创 2017-08-27 11:35:35 · 436 阅读 · 0 评论 -
LA 3530 Martian Mining 简单dp
题意: 给定一个n*m的矩阵, 每个方格中有a矿和b矿, 要求a矿只能从左到右运输, b矿只能从上到下运输, 求最大的运输量分析: 这题还是很好做的,下面是我的代码,不过我写的状态好像复杂了,看到别人还有更简单的状态表示:d[i][j]表示到(i,j)可以得到的最优解。状态转移也比较容易: dp[i][j]=max(dp[i][j-1]+sb[i][j],dp[i-1][j]+sa[原创 2016-09-04 21:46:41 · 401 阅读 · 0 评论 -
LA4256 UVa11552 dp状态设计
这两个题的状态表示是相似的: dp[i][j]都表示第i部分放(j)可以得到的最优解。 状态转移也是相似的: 枚举前一部分和当前部分,根据二者关系转移状态。 LA 4256 题意: 给定一个包含n个点的无向连通图和一个长度为L的序列A,你的任务是修改尽量少的数,使序列中任意两个相邻数或者相同,或者对应图中相邻的两个点。#include<cstdio>#include<cstring原创 2016-09-03 20:19:39 · 438 阅读 · 0 评论 -
poj 2506 递推+Java大数
DescriptionIn how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles?Here is a sample tiling of a 2x17 rectangle. InputInput is a sequence of lines, each line containing an int原创 2016-04-05 18:12:54 · 486 阅读 · 0 评论 -
Codeforces Round #349 (Div. 2) C. Reberland Linguistics DP
题意: 自己读了半天题,果断没看懂题意,看了题解才明白是这个意思啊。给一个字符串,去掉一个长度至少为5的前缀,剩下的切成长度为2或者3的串,且相邻的串不相同,问,最后可以切成多少个串且分别是什么;思路:dp[i][2]==1表示i,i+1形成的串可以满足要求,dp[i][3]==1同理;再就是转移了;考虑i位置,长度为2;(1)如果(i,i+1)与(i+2,i+3)相同,那么只有dp[i+2][3原创 2016-05-07 15:57:03 · 580 阅读 · 0 评论 -
poj 2442 优先队列/堆+dp
题意:给出m行,每行n个数,每次从一行中选择一个数,这m个数求和。所有的方案数是n^m,问这些方案中和最小的n个?分析:这题有点桶排序和滑动窗口的意思,还是挺不错的一道题。因为要最小的n个和,所以可以用优先队列去维护最小的n个和,这n个和是第i行中的元素和前i行的和相加选择的最优的(这又有点动态规划的思想QAQ)。也就是说,前i行得到了n个最小和,那么这n个最小和可以从第i行里各选择n原创 2016-07-12 10:54:42 · 414 阅读 · 0 评论 -
Codeforces 679B - dp
DescriptionLimak is a little polar bear. He plays by building towers from blocks. Every block is a cube with positive integer length of side. Limak has infinitely many blocks of each side length.A bloc原创 2016-07-01 12:31:14 · 271 阅读 · 0 评论 -
poj 3267 dp
题意: 问母串中至少去掉多少个字母才能是刚好由单词表中的一些单词连接而成的。 分析: dp,f[i]表示母串从第i位起始的后缀所对应的最少去掉字母数。 f[i]有两种选择f[i + 1] + 1或者f[i + num] + num - strlen(word[j])。其中num是从第i位开始匹配word[j]所需要的母串从i位起始的后缀的前缀的长度。#include<iostream>#i原创 2016-07-17 18:16:08 · 323 阅读 · 0 评论 -
hdu 5763 Another Meaning KMP+DP(多校)
题意: 一句话可能有两个意思,给出两个字符串A,B。B是双重意思的字符串,问A这个字符串可有几种意思?也就是说,把B串在A中替换成*,一共可以构造出几种? 例: hehehehe hehe 答案是5分析: 这题当时是我做的,第一次next数组编译错误QAQ,第二次A了。 思路是:先KMP求出B串在A串中出现的位置,然后就想着用dp了。由于在A串中B串可能会重叠,所以先O(n)预处理一下原创 2016-07-30 15:55:50 · 323 阅读 · 0 评论 -
hdu 5791 Two dp(多校)
题意: 给A序列和B序列,求A序列和B序列有多少个公共子序列(可以不连续)。例如{1,1,2} has 7 subsequences {1},{1},{2},{1,1},{1,2},{1,2},{1,1,2}. 分析: f[i][j]表示A序列前i个和B序列前j个可以构成的公共子序列数 f[i][j]=f[i][j-1]+f[i-1][j]-f[i-1][j-1] 如果a[i]==b原创 2016-08-02 22:19:05 · 375 阅读 · 0 评论 -
Codeforces 711c 简单dp
题目:http://codeforces.com/problemset/problem/711/C题意: 有n棵树,m(1-m)种颜色,要求划分成k组,每组是连续的同一种颜色的树。 刚开始树有的已经涂上色了,有的没涂色用0表示。第i棵树涂上第j种颜色需要颜料w[i][j]。已经涂色的不能再涂,问最少需要多少颜料?分析: 这题是比较简单的dp d[i][j][k]表示第i个树涂上原创 2016-09-01 09:27:39 · 858 阅读 · 2 评论 -
hdu 1024 Max Sum Plus Plus(m段最大子列和)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1024 题意: 本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题。分析: 这题n< 1e6,m< n,显然O(n^2)的复杂度不会去考虑啊!没想到居然O(n^2)去做QAQ。 设Num为给定数组,n为数组中的元素总数,Status[i][j]表示前i个数在选取第i个数的原创 2016-08-10 19:06:56 · 264 阅读 · 0 评论 -
hdu 1069 Monkey and Banana LIS变形
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意: 给出n种砖块,砖块是立方体,有三个参数l,w,h,每种有无限个,问砖块可以摞的最大的高度,一个砖块可以摞到另一个上必须底边两边都小于下面的那个。分析: 最长上升子序列变形题,排序后dp即可。因为每个砖块的三边都可以做长宽高,一共6种可能,也就是说一种砖块相当于6个不一样的砖块。c原创 2016-08-10 21:34:18 · 384 阅读 · 0 评论 -
经典dp模型的变形(未完待续。。)
这几天做了几道dp题,发现有几道是很经典的dp模型的变形,总结一下:数字三角形这算是dp的最最最入门的题了吧,但是这题变形的话,还是需要好好想想才能看出来的。 题目:hdu 1176 免费馅饼 题意: 一定时间,天上会从某个位置Xi掉下一块馅饼,1< =xi< =10,这个人位于xi,只能接到xi-1,xi,xi+1,三处之一,问这人可以接到的最多馅饼?分析: 这题想想还是挺有意思的Q原创 2016-08-12 16:13:47 · 1125 阅读 · 0 评论 -
最长上升子序列的初步学习
最长上升子序列 LIS对于求解LIS的可以用O(n^2)的复杂度求解: 设d[i]为以i为结尾的最长上升子序列的长度,则d[i]=max{0,d[j] }+1 (j< i)有时数据范围比较大,这时就要考虑O(nlogn)的算法了: 网上很多博客已经给出了很详细的说明,我只给出实现的代码: /* d[i]为以i为结尾的最长上升子序列的长度 g保存伪最长上升子序列 */原创 2016-08-10 20:50:17 · 349 阅读 · 0 评论 -
zoj 3747 Attack on Titans【递推好题】
题目http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5170题意给n个士兵排队,每个士兵三种G、R、P可选,求至少有m个连续G士兵,最多有k个连续R士兵的排列的种数。分析先把问题都转化成至多连续的情况:至多k个连续R,至多n个连续G情况 【减去】至多k个连续R,至多(m-1)个连续G情况。//dp[i][0]表示第i个为G,至多有原创 2017-08-27 14:03:40 · 358 阅读 · 0 评论