*Dynamic Programming
WANSNIM
NULL.
展开
-
POJ 2456 Aggressive cows(最小值最大化+二分)
http://poj.org/problem?id=2456题意:把C头牛放到N个带有编号的隔间里,使得任意两头牛所在的隔间编号的最小差值最大。例如样例排完序后变成1 2 4 8 9,那么1位置放一头牛,4位置放一头牛,它们的差值为3;最后一头牛放在8或9位置都可以,和4位置的差值分别为4、5,和1位置的差值分别为7和8,不比3小,所以最大的最小值为3。解题思路: 以后看见求最小值中的最大原创 2015-11-14 17:19:37 · 580 阅读 · 0 评论 -
状压DP入门题集锦
POJ 3254 Corn Fields 题意: 一块n*m的田,1表示这个地方可以种植,0代表这个地方不能种植。植物种植还必须满足两株植物不能相邻(横竖都不行)。问共有几种种植方法,而且当什么都不种时认为是一种方法。 解题思路: 种植用1表示,不种植用0表示。每一行的情况就可以用一个二进制数state来存储。state的范围是 [0 ~ 1<< state). dp[i][stat原创 2016-03-05 10:52:18 · 2142 阅读 · 1 评论 -
HDU 3001 Travelling (状压dp三进制)
http://acm.hdu.edu.cn/showproblem.php?pid=3001Problem Description After coding so many days,Mr Acmer wants to have a good rest.So travelling is the best choice!He has decided to visit n cities(he insi原创 2016-03-10 13:55:44 · 456 阅读 · 0 评论 -
POJ 2288 Islands and Bridges(状压dp)
http://poj.org/problem?id=2288Description Given a map of islands and bridges that connect these islands, a Hamilton path, as we all know, is a path along the bridges such that it visits each island ex原创 2016-03-12 15:43:59 · 410 阅读 · 0 评论 -
POJ 2411 + POJ 2663 + POJ 3420 小方格填充之多米诺骨牌系列(状压DP)
原文链接:http://blog.csdn.net/shiwei408/article/details/8821853解决此类问题,一般都是用1*2的小方块填充 n*m的矩阵。其中n或m两者中至少有一个较小。 解决此类的方法,当n和m都很小的时候,可以直接for循环枚举状态来更新求值。但是当二者间有一个稍大的时候,就需要构造矩阵来解决此类问题。通常将较小的那个数作为列用dfs来枚举两行之间的状态。原创 2016-03-14 22:03:54 · 1205 阅读 · 0 评论 -
Codeforces 360B + Codeforces 689C ( 二分 + DP )
http://codeforces.com/contest/360/problem/BB. Levko and ArrayLevko has an array that consists of integers: a1, a2, … , an. But he doesn’t like this array at all.Levko thinks that the beauty of the arra原创 2016-07-12 20:33:42 · 1398 阅读 · 1 评论 -
HDU 5835 Danganronpa(贪心)
http://acm.hdu.edu.cn/showproblem.php?pid=5835Problem Description Chisa Yukizome works as a teacher in the school. She prepares many gifts, which consist of n kinds with a[i] quantities of each kind,原创 2016-08-15 17:12:35 · 552 阅读 · 0 评论 -
HDU 3415 Max Sum of Max-K-sub-sequence(求长度不超过K的最大区间和)
http://acm.hdu.edu.cn/showproblem.php?pid=3415Problem Description Given a circle sequence A[1],A[2],A[3]……A[n]. Circle sequence means the left neighbour of A[1] is A[n] , and the right neighbour of A[原创 2016-09-11 17:00:54 · 598 阅读 · 0 评论 -
4385: [POI2015]Wilcze doły (单调队列)
http://www.lydsy.com/JudgeOnline/problem.php?id=4385Description给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0。 请找到最长的一段连续区间,使得该区间内所有数字之和不超过p。Input第一行包含三个整数n,p,d(1<=d<=n<=2000000,0<=p<=10^16)。 第二行包含原创 2016-09-11 21:54:24 · 489 阅读 · 0 评论 -
HDU 3591 The trouble of Xiaoqian (多重背包+完全背包)
http://acm.hdu.edu.cn/showproblem.php?pid=3591题意: 给一些票子的面值,和你拥有每种票子的数量。问你买了T元的东西这个过程一共接触了几张票子。这整个过程包括你给售票员票子和售票员找零钱给你。注意售票员拥有你手中所有票子的无限张。解题思路:过程分为两部分,一部分是给钱给售票员,一部分是售票员找钱。由于我手中只有钱的有限张,所以利用到多重背包,而售票员阿姨找原创 2015-08-26 22:09:36 · 474 阅读 · 0 评论 -
POJ 3262 Protecting the Flowers(贪心)
http://poj.org/problem?id=3262题意: 有N头牛,每头牛都有一个t,d; t表示这头牛到仓库需要t分钟,d表示每分钟该牛可以毁坏多少的花朵数量; 其中把一头牛迁到仓库需要花费的时间是 2*t 分钟,求最少毁坏花朵的数量。解题思路: 以前写贪心的时候都没有进行过多的证明。今天这题算是告诉自己一个警戒,贪心要多证明。还有就是数学大法好。假设两头牛的 t,d分别为原创 2015-10-01 19:20:26 · 403 阅读 · 0 评论 -
ZeroOnePack - 01背包模板
From《背包九讲》,稍作修改。题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。 状态转移方程是: f[i][v]=max{f[i-1][v原创 2015-08-25 19:08:16 · 551 阅读 · 0 评论 -
CompletePack - 完全背包模板
From《背包九讲》,稍作修改。题目:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件..等很多种。 01背包的状态转移方原创 2015-08-26 00:04:38 · 1029 阅读 · 0 评论 -
MultiplePack - 多重背包模板
From《背包九讲》,稍作修改。题目:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可。 1.类似完全背包状态转移方程: f[v]=max{f[v-k*c[i]]+k*w[i] }(0原创 2015-08-26 14:18:01 · 649 阅读 · 0 评论 -
HDU 2192 悼念512..(多重背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2191直接是模板题啊Orz… 题意是中文不再赘述。 贴个模板防止以后人老眼花记忆力差又忘了怎么写了!!!#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struc原创 2015-08-26 15:10:41 · 520 阅读 · 0 评论 -
HDU 1712 分组背包
dp背包第四弹之分组背包~~ 基本类型:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 解决思路:选取某组中某一件还是一件都不选。 伪代码:dp数组记录的是 前k组物品花费费用v能取得的最大权值。 for原创 2015-06-04 22:56:58 · 427 阅读 · 0 评论 -
HDU 1025 Constructing Roads (最长上升子序列O(n*logn)算法)
最长上升子序列,比线段树更优的做法。原创 2015-08-27 21:31:32 · 487 阅读 · 0 评论 -
HDU 1171 Big Event in HDU (由01背包演变的水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1171题意:给N组数据,每组数据有两个数分别代表某物品的价值和该物品一共有多少件。问是否能够平均分成两部分A,B,使得这两部分所获得的价值尽可能相等,如果不能平均分,那么输出至少要保证A>B; 解题思路: 因为数据比较水,转化成01背包问题。其实用多重背包也可以解决该问题。将所有物品的总价值算出来然后平均分得到s原创 2015-08-26 10:35:56 · 484 阅读 · 0 评论 -
CodeForce 505C Mr. Kitayuta(DP+DFS)
http://codeforces.com/contest/505/problem/C题意是:有30001个岛屿,有的岛屿上存在宝石。给出岛屿上宝石的情况和第一次跳的步数。并且这个人每次跳的步数是 上次跳的步数/上次跳的步数 - 1/ 上次跳的步数 +1。如果跳到的岛屿上有宝石,那么将获得这个岛屿上宝石的数量。用DP+dfs来做。dp[i][j]表示跳到长度为i的岛屿,j表示当前跳跃的步数。 很原创 2015-09-16 15:42:13 · 573 阅读 · 0 评论 -
POJ 1088 滑雪 (DFS+DP)
http://poj.org/problem?id=1088题意: 在一个N*M的map中找最长下降序列的长度。开始用BFS的记忆化搜索,发现总是不能更新找到优解的前面的值。这种情况下,DFS的回溯显得更优秀。 写这篇博客的目的就是为了告诉自己有时候DFS比BFS算法更省时#include <iostream>#include <cstdio>#include <cstring>#inclu原创 2015-08-23 10:23:31 · 474 阅读 · 0 评论 -
HDU 5821 Ball ( 贪心)
http://acm.hdu.edu.cn/showproblem.php?pid=5821Problem DescriptionZZX has a sequence of boxes numbered 1,2,…,n. Each box can contain at most one ball.You are given the initial configuration of the balls原创 2016-08-12 14:36:10 · 754 阅读 · 0 评论