
动态规划
Orion233
这个作者很懒,什么都没留下…
展开
-
数塔问题--经典的动态规划问题
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? Memory Limit: 32768/32768 K (Java/Others)Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]原创 2017-08-05 20:59:13 · 700 阅读 · 0 评论 -
#HDU 2577 How to Type ?
How to Type?题意: 给一串有26个字母(大小写都可能有)组成的字符串,现在按照题目给的要求敲出来,问最少的敲击次数。这个人打字喜欢让caps键灭掉。分析:因吹丝听!刚开始还没有理解题意,原来 caps 不亮的情况下也可以用 shift + 字母;亮的情况下可以用 shift+字母打出小写字母。代码如下:#include <bits/stdc++.h>#define INF 0x3f3f原创 2017-08-04 16:18:55 · 180 阅读 · 0 评论 -
#HDU1203 I NEED A OFFER!
I NEED A OFFER! 题意: 中文不解释。分析: 类似 HDU2955。#include <bit/stdc++.h>#define INF 0x3f3f3f3f using namespace std;typedef long long ll;const ll mod = 1e9 + 7;//这题和A差不多struct ndoe { int mon; dou原创 2017-08-04 14:38:22 · 458 阅读 · 0 评论 -
#HDU 1087 最大递增子序列和
Super Jumping! Jumping! Jumping!题意:无聊的猿发明了“人赢跳跳棋“,规则是要从Start->End,中途可以间隔着跳过若干个格子,但是下一步位置的权值必须大于当前格子的权值。最后,所经过格子的权值和大的获胜。分析:不连续的最大递增子序列和问题。当我以第 i 个格子作为终点时我所能取得的最大和,其子问题是以第 i -1 个格子为终点时的最大和。情况有两种,当前 num[原创 2017-07-25 21:54:23 · 287 阅读 · 0 评论 -
#HDU 1421 简单dp
搬寝室题意:一个苦逼的大二狗要搬宿舍到对面榴园去,甚是激动,想着要从原宿舍的 n 件物品中带走 2*k 件物品。每次取两件,麒麟臂每次的的损耗等于左右两只手物品重量差的平方。求最小的总损耗。分析:简单的动态规划,对于i 件中取出 2 x j 件物品的子问题就是从 i-1 件中取出 2 x(j-1) 件物品 或者 从 i-2 件中取出 2 x (j-1)件物品,显然我们应当取出着两种方案中的较小值,原创 2017-07-25 19:58:45 · 181 阅读 · 0 评论 -
#HDU 2830 Matrix Swapping II
Matrix Swapping II 题意: 给定一个 N * M 的 01 矩阵,可以将任意两列随意交换且不限次数,求醉的的矩阵面积。分析: 这道题目比较像 HDU1506 只不过这道题目也要转化一下,最大子矩阵问题是连续的几列组成,而这道题目需要先分别计算每一列的连续的 “1”的 值(即cnt[ ][ ]),然后在按行递减排序,转移方程 dp[ i ] = max( dp[ i ], cn原创 2017-08-02 16:47:43 · 292 阅读 · 0 评论 -
#HDU 2870 dp最大子矩阵
Largest Submatrix 题意:给定一个由相应字母组成的矩阵,其中”w,x,y,z”可以替换为”a,b,c”中相应若干个。求最大子矩阵。分析:这是 HDU1505 和 HDU1506 的升级版。将字母转变之后再做三次 HDU1505 的步骤就可以了。 代码如下:#include <algorithm>#include <bitset>#include <cmath>#includ原创 2017-07-25 10:47:30 · 268 阅读 · 0 评论 -
#HDU 1069 简单dp
Monkey and Banana题意: 给定一些长方体,问可以摆出的最大高度,要求下层长宽必须严格大于上层。分析: 每个长方体都有三种摆放的顺序呢,那么接下来就把所有情况记录下来搭建积木。代码如下:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include原创 2017-08-02 09:08:54 · 218 阅读 · 0 评论 -
#HDU 1505 dp 最大子矩阵
City Game题意:在一个由”R”、”F”组成的大矩阵中求出一个最大的全是”F”的最大子矩阵。分析:对于这个题目,我们可以参照HDU 1506,类型相同,只需转换一下就可以做。对于每一行,我们求出每一个元素向上可以达到的最大高度( 即 HDU 1506 中的柱形的高度),这样就转化成m组柱形,对每一组都去求出最大的子矩阵即可。TIPS:答案是“m组中最大的矩阵 * 3”;代码如下:#includ原创 2017-07-24 16:22:06 · 305 阅读 · 0 评论 -
#HDU 1506 dp求最大子矩阵
Largest Rectangle in a Histogram 题意:求一列连续柱状图中最大的一个矩阵。 分析:对于每一个柱形(宽度为 1),我们分别向左&向右找到连续的比它高的柱形,用两个数组记录左右的最大值,然后依据 (r-l+1)*h 求出矩阵面积。代码如下:#include <algorithm>#include <cmath>#include <cstdio>#include <原创 2017-07-24 14:27:25 · 349 阅读 · 0 评论 -
01背包问题的小改--结合概率
A - RobberiesThe aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in t原创 2017-03-02 22:56:29 · 572 阅读 · 0 评论 -
#HDU 2845 Beans 最大不连续子列和
Beans 题意&分析:玩“吃豆子”的游戏,规则如图:对于这个二维的问题,我们可以分别对行列做两次dp。先对每一行求出最大的不连续子列和(转移方程:r[ i ] = max( r[ i - 2 ] + r[ i ], r[ i - 1] ),i>=2),注意下标范围。然后对每一行的最大值求最大不连续子列和,思路同上。代码如下:#include <bits/stdc++.h>#define INF原创 2017-08-07 10:50:19 · 375 阅读 · 1 评论