DP
hnust_W_unc_h
这个作者很懒,什么都没留下…
展开
-
HDU5965 扫雷(记忆化搜索)
思路 :设d[i][j][k][l] 为 第i个位置还有j个炸弹未放置,且(1, i)的位置有k个雷,(3,i)的位置有l个雷,0 #include#include#include#includetypedef long long ll;const int maxn = 1e4 + 10;const int INF = 1e9;const int mod = 1e8 +原创 2016-11-07 18:51:26 · 337 阅读 · 0 评论 -
Gym101608L Knights(dp)
题目链接题意: \ \ \ \ \ \ 一个n∗mn∗mn * m的网格, 网格每一行都有一个骑士,现在骑士要移动到安全的地方,即网格中字符为′.′′.′'.'的地方,每个骑士必须要移动,原来骑士所在的位置也是不安全的位置,问共有多少种方案让骑士移动...原创 2018-04-19 18:23:31 · 225 阅读 · 0 评论 -
URAL1223 Chernobyl’ Eagle on a Roof(dp)
题意: \ \ \ \ \ 有一栋nnn层楼的建筑,一个鸡蛋在超过xxx层楼的地方丢下去的时候会碎,现在有mmm个鸡蛋,问你最坏情况下需要多少次才能知道xxx的值。 \ 思路: 原创 2018-04-01 19:09:43 · 219 阅读 · 0 评论 -
HDU5401 Persistent Link/cut Tree(计数)
题意: \ \ \ \ 初始状态有一棵111个节点标号为000的树,对于第iii次操作,将第aiaia_{i}棵树中的标号为cicic_{i}的节点和第bibib_{i}棵树中的标号为didid_{i}的节点连接一条长为lilil_{i}的边,定F(i)=∑i=0n−1∑j=i+1n−1d(vi,vj...原创 2018-03-23 11:12:00 · 211 阅读 · 0 评论 -
HDU 5378 Leader in Tree Land (dp + 概率)
题意:n个点的有根树, n个人(标号)每个人分配在其中的一个节点上, 如果x是一个领导者,那么x是在其所在的子树中所有标号中的最大值,显然x可以是多棵子树的领导者,现在问你有多少种分配方法,使得这棵树中恰好有k个领导者思路:dp[i][j] : 前i棵树(根节点是1, 2, ...i的子树)中有j个领导者的概率,那么有:dp[i][j] = dp[i - 1][j - 1] * (1 / size...原创 2018-03-05 18:47:02 · 184 阅读 · 0 评论 -
HDU5362 Just A String(dp + 计数)
/**题意:长度为n的字符串,有m种字符填充,每种字符在每个位置都是等概率的,好的子串定义为:该子串中所有字符重排之后该子串可以形成回文串,问你有多少个好的子串思路:长度为l的好的串如果有x种,那么在长度为n的字符传中,长度为l的子串的数量共有x * (n - l + 1) * m^(n-l)个长度为l的话左端点共有(n - l + 1)个位置可以放,剩余n-l个位置任意设dp[i]...原创 2018-02-23 12:08:21 · 251 阅读 · 0 评论 -
Uva 7344 Numbered Cards (状压DP)
/**题意:从1 ~ N,选出若干个子集,满足子集里面任意两个数的任意两个数位没有相同的,一个数自身可以有相同的数位,求这样的子集的个数思路:因为数字只有九个,考虑状压,先看状态为S的数(状态为0000000101代表只有2和0的数,比如200,20,220),设dp[S]:N以内子集状态为S的数量,ans[S]:N以内的一个数的状态恰为S的数量,当选择状态为S的添加进集合时,那么有dp[原创 2017-08-22 11:00:56 · 279 阅读 · 0 评论 -
POJ 3709 K-Anonymous Sequence(斜率DP)
题意:给出一个n个数的非严格递增序列,每次操作可以将其中的一个数减一,问最少多少次操作,使得序列中的任何一个数在序列中至少都有k-1个数与之相同。思路:对于a0显然不需要再减去了,设dp[i] : 前i个数满足条件并且第i个数为分界点时最少的操作次数,则有:dp[i] = min { dp[j] + a[j+1] - a[j + 1] + a[j + 2] - a[j +1] +原创 2017-07-20 19:26:59 · 373 阅读 · 0 评论 -
UvaLive 4256 Salesman (DP)
题意:给n点的无相连通图, 以及一个序列a, 要修改序列中的数,使得经过最少次数修改之后序列中的每两个相邻的数在图中相邻或者相等。思路:设dp[i][j]第i个数为j的时候最少的修改次数, 则dp[i][j] = min {dp[i - 1][k] + t | k和j相等或在图中相邻 }(其中j =a[i]时t=0,否则t为1)#include#include#incl原创 2017-04-27 21:16:32 · 415 阅读 · 0 评论 -
FZU 2250 不可能弹幕结界(单调队列优化dp)
/*记录从上往下走不经过穿越能到达每一列j的行数i,用vector L[j]存下idp[i][j] 代表能否到达(i,j)这个位置,显然dp[i-1][j]成立的时候dp[i][j]一定成立,然后看经过左走右走k步之内能否到达,他要么一直往左走或者一直往右走不会回头, 因为回头多占用步数, 假设往右走能到达(i,j)这个位置,那么一定存在一个a(a 很明显的单调队列优化dp的条件)d原创 2017-04-17 12:33:50 · 479 阅读 · 0 评论 -
POJ 3926 Parade(DP)
题意:在一个n * m个网格街道中,有横向街道和纵向街道,其中纵向街道没有值,横向街道有一个长度和人气值,现在国王要从网格最下面的街道走向最上面的街道,有以下要求:1、只能往上不能往下走2、可以横向走但是不能走过一个街道两次,既可以向东也可以向西走3、在同一行中横向走过的街道的总距离不能超过K输出人气最大的路径的人气总和思路:很显然这是一个dp题,设dp[i][j]到达原创 2017-03-15 11:34:37 · 351 阅读 · 0 评论 -
Uva 11584 Partitioning by Palindromes (简单DP)
题意:给出一个字符串,问最少能划分成多少个回文串思路:dp题,先预处理出在区间[i, j]内是否能构成回文串,区间[i,j]能构成回文的条件是区间[i+1, j-1]能够成回文,这样的话,设can[i]为以第i个字符结尾最少形成的回文串,则有:can[i] = min { can[j] + 1 }, 其中区间[j, i]能构成回文#include#include#i原创 2017-03-11 10:14:25 · 392 阅读 · 0 评论 -
Uva 11270 Tiling Dominoes(轮廓线动态规划)
题意:给一个n*m的棋盘用1*2的骨牌铺满,有多少种方法。思路:lrj训练指南的原题,讲的很清楚,以当前格子为右下角,在决定是否要放的时候,以当前格子往前数m格,形成一个状态,当然假设这些格子之前的都已经铺满了,那么只有不放,左放,上放三种状态,如果上面格子没放,那么久一定要上放,不然之后无法再铺满上面的格子。#include#include#includetyped原创 2016-12-08 14:33:48 · 422 阅读 · 0 评论 -
LA 4794 Sharing Chocolate (状压DP)
题意:给你一块x * y的巧克力问是否经过若干次切割后能分成面积为a1,a2,....an的巧克力思路:因为n很小,所以可以状态压缩,设dp[S][i]当宽为i的时候是否能分成集合为S的巧克力,因为宽度确定了的话,那么长度也就一定确定了,再者就是保证S集合的巧克力面积总和要可以整除i。这里还需要运用到一个枚举子集的技巧,这样才能高效枚举子集。#include#includ原创 2016-12-07 10:01:57 · 256 阅读 · 0 评论 -
LA 3983 Robotruck(DP)
题意:有n个垃圾且有各自的重量,一个机器人按标号从小到大开始捡垃圾,且手中的垃圾重量不能超过C,问机器人怎样捡才能使他的行走路程最短。思路:dp,设dp[i] : 拾取完前i个垃圾的最短路程,则有dp[i + k] = min { dp[i] + dis[i + 1] + dis[i + k] + tal[i + k] - tal[i + 1] },其中dis[i]为第i个垃圾距离源点原创 2016-12-06 20:57:12 · 333 阅读 · 0 评论 -
Uva 10859 Placing Lampposts(树状DP)
题意:给一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮。每盏灯将照亮以他为一个端点的所有边,在灯的总数最小的前提下,被两盏灯同时照亮的边数尽量大思路:放置的灯数a尽量少,被两盏灯同时照亮的边数应尽量大。后面那句话等价于恰好被一盏灯照亮的边数c尽量小。最终求 x = a * M + c的最小值。其中M是一个足够大的数,那么x / M就是放置的灯数,x % c就是被原创 2016-12-06 13:49:11 · 234 阅读 · 0 评论 -
哈尔滨理工大学软件学院ACM程序设计全国邀请赛 C Coin
题意:有n个硬币,价值总和为m,问硬币可以凑成1 ~ m的所有价值 的方案总数为多少思路:dp题,设dp[i][j][k]表示:用i个硬币能凑成1 ~ j且最大面值为k的方案数,那么增加一个面值为add(add >= k)的硬币时, 则有dp[i + 1][j + add][add] += dp[i][j][k],注意add的值不能超过j + 1,理由是当add > j + 1时,无论原创 2016-12-06 11:52:13 · 379 阅读 · 0 评论 -
Uva 10891 Game of Sum(区间DP)
题意:给一个长度为n的序列,A、B两人玩游戏,可以从左端或者从右端开始取走任意数量的数,最终取得数之和为该人得到的分数,两人都希望自己的分数尽可能高,求最终A - B的分数思路:区间dp,设dp(i,j)为在区间[i,j]取数时,先手可以得到的最大的分数,则dp[i][j] = sum[i][j] - min(dp[i+1][j],dp[i+2][j]......dp[j][j],dp原创 2016-12-04 17:42:11 · 348 阅读 · 0 评论 -
AtCoder Regular Contest 097(E)
题目链接题意: \ \ \ \ 2n2n2n个黑球白球排成一行,黑球和白球上面都写了111~nnn的数字,每次可以交换相邻的两个球。问最少操作多少次使得白球序号递增,黑球序号也递增。 思路: &原创 2018-06-27 19:37:51 · 242 阅读 · 0 评论