一道风骚的DP】的更多相关文章

也是校赛学长出的一道题~想穿了很简单..但我还是听了学长讲才明白. 观察力有待提高. Problem D: YaoBIG's extra homeworkTime LimitMemory Limit1 s128 MBDescriptionOne day, a teacher assigned this extra homework to students of UCAS:"What's the number of the solution that an n n ladder is covere…
Postal Vans ACM South Pacific Region -- 2003 Tiring of their idyllic fields, the cows have moved to a new suburb. The suburb is a rectangular grid of streets with a post office at its Northwest corner. It has four avenues running East-West and N (1 <…
Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 4990    Accepted Submission(s): 1509 Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique…
题目链接: https://vjudge.net/problem/36696/origin 题目大意: 要求从1到m升序排列,点可以随意移动,问最少需要移动多少次, 思路: 动态规划 可以推出转移方程为:dp[i] = max(dp[i], dp[j]) && mp[i] >= mp[j]  dp[i]++; 其中,dp[i]为i位置的序数mi前能保留(也就是不移动)的最大种类数. dp[i]++是因为自己也不能移动自己,得加一. 下面是AC代码: #include <iost…
题目链接: https://vjudge.net/problem/19213/origin 大致题意: 一个滑雪者想知道自己在固定高度的山坡中最多能滑的距离是多少. 思路: 首先想到的就是dfs,但是..超时了,所以我们要用到动态规划进行优化. dfs的思路就是从第一个位置开始dfs搜索. dp的思路就是数形的思维,每一个树的根节点就是dp[x][y].这是一个4叉树,当dp[x1][y1] < dp[x][y]的时候进行向下递归,每次操作加上权值1,这个操作最终会返回一个最大值. 下面是AC代…
题意:给定一棵树,从中选出一些节点,使得不成父子关系的节点对数最多.问这个最大值是多少. 思路:首先既然是给定一颗树,先要选择合适的数据结构,来保存这颗树.由于这颗树只关心根节点在哪里,所以只需要用一个fa数组来保存每个点的根节点,此外设初始化为0,所以根节点的fa[root]为0,所以从任意一个结点的父节点往上遍历,直到遍历到某某个结点的父节点为0,则这个结点就是父节点 这道题个人感觉关键是从根节点开始往下dp,所以根节点要确定.. 这道题的状态转移方程为,dp[i][1],选用第i个节点时,…
今天想学点动态规划的知识,于是就看了杭电的课件,数塔问题啊,LCS啊都是比较经典的动规了,然后随便看了看就开始做课后练习题... HDOJ 1421 搬寝室 http://acm.hdu.edu.cn/showproblem.php?pid=1421 题目大意:从n(n <= 2000)个数中选出k对数(即2*k个),使它们的差的平方和最小. 例如:从8,1,10,9,9中选出2对数,要使差的平方和最小,则应该选8和9.9和10,这样最小,结果为2 因为知道是dp的题,先建个dp[][]数组,然…
题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[x,x+1,x+2]的效果等同于 [x,x,x],[x+1,x+1,x+1],[x+2,x+2,x+2],所以每种顺子牌型最多打2次(如果多于2次,可以被少于3次的方案替代掉,因此忽略) 2.对于每一种牌,用途只有四种.[i-2,i-1,i], [i-1,i,i+1], [i,i+1,i+2], […
题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATCC", "CATCAA", "ATCATC"都是不好的DNA序列,这些不好片段我们可以称为病毒片段. 现在已知m个病毒片段, 然后给定一个DNA串,问如果使用最少的修改(将DNA中的某个字母,变为其他字母,比如A变T,但变的字母也只能是"ACTG&q…
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3112  Solved: 1816[Submit][Status][Discuss] Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K &…
***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6984    Accep…
以下引用自:http://www.cnblogs.com/Lyush/archive/2011/08/31/2161314.html沐阳 该题可以算是一道经典的DP题了,题中数据是这样的.以 3 1 3 2 为例,首先 3 代表有三个数, 后面给出三个数,求该串的一个子串,使得其值一直是递增的,而且要求输出最大的和值.可以论证,该子串一定会是最长上升子串,因为,如果一个串还能够插入一个元素的话,那么这个串就一定不是最大的和了.而这个最长的上升子串还满足是所有同样长度的子串中最优的,和值最大. 具…
通过先前在<动态规划——背包问题>中关于动态规划的初探,我们其实可以看到,动态规划其实不是像凸包.扩展欧几里得等是具体的算法,而是一种在解决问题中决策的思想.在不同的题目中,我们都需要根据题设恰到好处的把整个过程分割成小的状态,然后找到对应的状态转移方程,尽管都是这个过程,但是有时候条件稍微一遍,我们分析状态并找状态转移方程的思路都会发生改变,因此动态规划的题目呈现出很大的灵活性. 除了典型那背包问题涉及动态规划,还有很多其他的模型——概率dp.数位dp.区间dp.插头dp,这些都是在不同的情…
一道入门树dp, 求一棵树的重心...我是有多无聊去写这种题...傻X题写了也没啥卵用以后还是少写好.. ---------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   const int maxn = 16009;   int sz[maxn],…
一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V; ++j){ if(i - a[j] > 0){ dp[i] += dp[i - a[j]]; } } } 状态存在冗余, 输出的时候答案肯定不对 但只需要改一下两个for循环的顺序即可. Source Code: /* ID: wushuai2 PROG: money LANG: C++ */ //…
Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑! 可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫.让我们一起帮帮执着的他吧! 命运大迷宫可以看成是一个两维的方格阵列,如下图所示:   yifenfei一开始在左上角,目的当然是到达右下角的大魔王所在地.迷宫的每一个格子都受到幸…
https://code.google.com/codejam/contest/6304486/dashboard#s=p1 这是一道简单的dp,dp[i][j]代表A的voter为i,B的voter为j时的成功方案数,转移方程是dp[i][j]=dp[i-1][j]+dp[i][j-1],这里一定满足i>j,(由题意,不管何时,A都要赢),所以初始化dp[i][j]为-1,dp[0][0]=1; 这道题要注意的地方是:由于数据范围是2000,2000!非常大,所以要取对数,这是乘除对应变成加法…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13394    Accepted Submission(s): 4686 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yif…
题目描述 某乡有n个村庄(1 输入格式: 村庄数n和各村之间的路程(均是整数). 输出格式: 最短的路程. 输入样例: 3 0 2 1 1 0 2 2 1 0 输出样例 3 说明 输入解释 3 {村庄数} 0 2 1 {村庄1到各村的路程} 1 0 2 {村庄2到各村的路程} 2 1 0 {村庄3到各村的路程} 题目分析 又是一道状压DP经典 我们以一串二进制数表示村庄的集合(状态) 1表示该村庄访问过,0表示没有 定义dp[i][j]表示 从起点到第j号点 且到达时状态恰好为i的最短路 则最后…
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的地方,希望大家指出. 闲话不多说,进入正题. 首先,在介绍状压dp之前,我们先来了解一下状态压缩(常用的为二进制,why?[因为其他的我不会]). 什么是状态压缩呢?顾名思义,就是将数转换为二进制来进行一些操作. 基本操作: 看完基本操作,我们来看一下一些稍微复杂的操作. 操作 运算 取出整数n在二…
斜率优化DP的综合运用,对斜率优化的新理解. 详细介绍见『玩具装箱TOY 斜率优化DP』 土地征用 Land Acquisition(USACO08MAR) Description Farmer John is considering buying more land for the farm and has his eye on N (1 <= N <= 50,000) additional rectangular plots, each with integer dimensions (1…
最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M >= N个数中正数的个数,那么输出所有正数的和. 例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26. Input Format 第1行:2个数N和M,中间用空格分隔.N为整数的个数,M为划分为多少段.(2 <= N , M <= 5000) 第2 -…
<题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格.图上其它白…
很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 << 11][1 << 11]显然是要MLE的,我们可以想到用滚动数组优化,事实上确实可以用滚动数组优化.然而 在时间复杂度上 100 * 1024 * 1024 * 1024也是一个不可能补TLE的数字,一个不那么显然的办法是预处理出所有可行的状态,经过看题解或者写个暴力炸一下之后可以知道…
随着校oj终于刷进了第一页,可以不用去写那些水题了,开始认真学习自己的东西,当然包括文化课.努力.. 这道题呢是道树形dp,可看到了根本就不知道怎么写思考过程: 5min 终于看懂了题 画了样例的图把输出看懂了 然后发现这不可做.. 设个状态吧,这肯定是从子树上进行转移的然后然后f[i]表示以i为根节点子树的大小吧.然后真的就不可做了. 想列状态转移方程发现价值算不出来放弃,脑抽没有多加一维状态来表示价值哎. 无奈点开题解 1min恍然大悟..dp好难. 其实这道题就是一个简单的树形背包dp,细…
顺便开另外一篇放一些学过的各种dp dp总结:https://www.cnblogs.com/henry-1202/p/9194066.html 开坑先放15道题,后面慢慢补 目标50道题啦~~,目前50/50 1.合唱队形 题目链接 LIS模板题,这道题只要正着求一遍LIS,倒着求一遍LIS,然后求max即可,注意因为求了两次LIS,一定会有一个人是被计算了两次的,所以在求max的时候要记得-1 使用O(n2)做法即可 #include <cstdio> #include <cstri…
又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的人生经验理解能力. 题目想必已知,我就提几点可能会搞错的点吧. 1.题目说了青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D:但却不能跳到A,B上再跳回来.所以不可以脑补成汉内塔那种跳法. 2.青蛙只能跳到比它大1号的青蛙上面,而不是比他大的青蛙就行.所以不可以脑补…
Description 对于一个n*m的地图,每个格子有五种可能:平地,障碍物,出口,入口和神器.一个有效的地图必须满足下列条件: 1.入口,出口和神器都有且仅出现一次,并且不在同一个格子内. 2.入口,出口和神器两两都是连通的. 连通性判断为四连通. 现在给出一个n*m的地图,其中一些格子的状态已经确定,另一些格子的状态未确定. 问当所有的格子状态确定之后,有多少种情况使得该地图是一个有效的地图?输出结构为答案模1e9+7. Input 第一行输入两个整数n和m,意义如题目所示.接下来n行,每…
很经典的一道状压dp(似乎叫做旅行商问题),用f[i][s]表示在到达点i,已经经过的城市用二进制表示为s,于是方程就很简单了: f[i][s] = min { f[j][s ^ (1 << j)] + dis[j][i]| s & (1 << j) != 0} 然后用记忆化搜索即可,注意方向,因为dis[i][j]可能不等于dis[j][i].(下面的代码某个处理似乎没有必要) Code #include<iostream> #include<cstdi…
POJ3176-Cow Bowling 题目大意:现有n行数,以金字塔的形式排列,即第一行一个数字,第二行2个数字,依次类推,现在需要找一条从第一层到第n层的路线,使得该路线上的所有点的权值和最大 思路:根据分析可以得出状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]),dp[i][j]表示以第i行第j个位置作为终点的的线路中的最大权值. #include <iostream> using namespace std; ; int s[N][N]; int…