随笔分类 - 动态规划(DP)
HDU 1078 FatMouse and Cheese (记忆化搜索)
摘要:题意:给定一个n*n的矩阵,问从(0,0)开始走,每次最多水平或者垂直走k个格子,且要保证每次到达的格子要大于前一个,问最大和是多少。 析:一个很简单的记忆搜索,dp[i][j],表示到达(i,j)的最大和是多少,我们可以反着推出答案。 代码如下:
阅读全文
HDU 5542 The Battle of Chibi (离散化+树状数组优化DP)
摘要:题意:求n个数中长度为m的上升子序列的个数。 析:很容易想到一个n的三次方的DP,dp[i][j]表示第 i 个数长度为 j 的LIS 有多少个,但是会TLE,因此必须优化,dp[i][j] = sum{dp[k][j-1] | a[i] > a[k]} 我们可以用树状数组优化,当然用线段树也OK,
阅读全文
L2-014. 列车调度 (DP)
摘要:火车站的列车调度铁轨的结构如下图所示。 Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要
阅读全文
UVa 10564 Paths through the Hourglass (DP)
摘要:题意:从最上面走到最下面,使得路过的数求和为s,并输出编号最小的一组路径。 析:基本动规,dp[i][j][s] 从最下面到 i,j 和为s,路径数,要么从左面要么从右,求和就好了,注意上面和下面的不太一样,要分别求解。 代码如下:
阅读全文
UVaLive 3530 Martian Mining (简单DP)
摘要:题意:给定一个n*m的网格,每个格子里有A矿和B矿数量,A必须由右向左运,B只能从下向上运,中间不能间断,问最大总数量。 析:一个简单DP,dp[i][j] 表示 从 (0, 0) 到 (i, j) 最大人运输量。要么向左运输,要么向上运输,取最大值。 代码如下:
阅读全文
POJ 3280 Cheapest Palindrome (区间DP)
摘要:题意:字串S长M,由N个小写字母构成。欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费。 析:是一个简单DP,dp[i][j] 表示区间 i - j 是回文串的最小花费,很容易知道,删除和添加效果是一样的,所以我们就可以只取一个最小值就好。 做的时候我的初始化在外面,就一直WA。 代码
阅读全文
UVaLive 4731 Cellular Network (期望DP)
摘要:题意:手机在蜂窝网络中的定位是一个基本问题,假设蜂窝网络已经得知手机处于c1,c2,,,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机, 但这样做很浪费带宽,由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的办法就是把这些区域分成w组,然后依次访问,求最小的访问区域数的期望
阅读全文
UVa 11404 Palindromic Subsequence (LCS)
摘要:题意:给定一个字符串,问删除一些字符,使得它成为一个最长回访串,如果有多个,输出字典序最小的那个。 析: 我们可以把原字符串反转,然后求两个串的LCS,就得到最长回文串,不过要注意一些细节。 代码如下:
阅读全文
UVa 11552 Fewest Flops (DP)
摘要:题意:给一个字符串,把它分为k块,每一块里面的字母可以任意的排序。最终字符串, 连续的一样的字母算作一个chunk,问总chunks最少是多少? 析:dp[i][j] 表示第 i 个块,第 j 位在末尾时chunk最少,状态转移方程也应该好写,如果 dp[i-1][j] 和第 i 块第一个一样,那么
阅读全文
UVa 10534 Wavio Sequence (LIS+暴力)
摘要:题意:给定一个序列,求一个最长子序列,使得序列长度为奇数,并且前一半严格递增,后一半严格递减。 析:先正向和逆向分别求一次LIS,然后再枚举中间的那个数,找得最长的那个序列。 代码如下:
阅读全文
UVaLive 4256 Salesmen (简单DP)
摘要:题意:给一个无向连通图,和一个序列,修改尽量少的数,使得相邻两个数要么相等,要么相邻。 析:dp[i][j] 表示第 i 个数改成 j 时满足条件。然后就很容易了。 代码如下:
阅读全文
UVaLive 3983 Robotruck (DP + 单调队列)
摘要:题意:有n个垃圾,第i个垃圾坐标为(xi,yi),重量为wi,有一个机器人,要按照编号从小到大的顺序剑气所有的垃圾兵扔进垃圾桶,垃圾桶在原点, 每次总重量不能超过C,两点间距离为曼哈顿距离,求出最短的距离和。 析:第一反应想到的状态是有个数和重量,一看,时间复杂度受不了,只能改。dp[i] 表示从原
阅读全文
UVaLive 10859 Placing Lampposts (树形DP)
摘要:题意:给定一个无向无环图,要在一些顶点上放灯使得每条边都能被照亮,问灯的最少数,并且被两盏灯照亮边数尽量多。 析:其实就是一个森林,由于是独立的,所以我们可以单独来看每棵树,dp[i][0] 表示不在 i 点放灯,dp[i][1] 表示在 i 点放灯,很简单的一个DP 代码如下:
阅读全文
UVa 11825 Hackers' Crackdown (状压DP)
摘要:题意:给定 n 个计算机的一个关系图,你可以停止每台计算机的一项服务,并且和该计算机相邻的计算机也会终止,问你最多能终止多少服务。 析:这个题意思就是说把 n 台计算机尽可能多的分成一些组,使得每组的的 u 是全集。我们可以用状压DP来解决,先处理输入,然后再处理每个子集, dp[s] 表示状态为
阅读全文
UVa 10891 Game of Sum (DP)
摘要:题意:给定一个长度为n的整数序列,两个人轮流从左端或者右端拿数,A先取,问最后A的得分-B的得分的结果。 析:dp[i][j] 表示序列 i~j 时先手得分的最大值,然后两种决策,要么从左端拿,要么从右端拿,肯定是拿的是最大的。 代码如下:
阅读全文
CodeForces 349B Color the Fence (DP)
摘要:题意:给出1~9数字对应的费用以及一定的费用,让你输出所选的数字所能组合出的最大的数值。 析:DP,和01背包差不多的,dp[i] 表示费用最大为 i 时,最多多少位,然后再用两个数组,一个记录路径,一个记录是数字几即可。 代码如下:
阅读全文
POJ 2184 Cow Exhibition (01背包)
摘要:题意:每行给出si和fi,代表牛的两个属性,然后要求选出几头牛,是的则求出总S与总F的和,注意S与F都不能为负数 析:用dp[i]来表示存放s[i]的时最大的f[i],其实就是一个01背包。只是取不取的关系。注意是有负数,所以把数组开大一点,然后s[i]的正负数, 我们取的顺序不同,正数是逆向,负数
阅读全文
UVa 1627 Team them up! (01背包+二分图)
摘要:题意:给n个分成两个组,保证每个组的人都相互认识,并且两组人数相差最少,给出一种方案。 析:首先我们可以知道如果某两个人不认识,那么他们肯定在不同的分组中,所以我们可以根据这个结论构造成一个图,如果两个不相互认识, 那么就加一条边,然后如果这个图是二分图,那么这分组是可以,否则就是不可能的。然后dp
阅读全文
UVa 1412 Fund Management (预处理+状压DP)
摘要:题意:题意很难说清楚自己看原文,链接:UVa 1412 Fund Management 析:总体来说如果没有超时的话,这个题不是特别难,但是这个题很容易超时,主要是体现在状态转移时,很容易想到状态方程表示方法, dp[i][s]表示第 i 天时状态为s时能获得的最大值,转移方程也很容易,三种决策,要
阅读全文
UVa 12105 Bigger is Better (DP)
摘要:题意:用不超过 n 根火柴,组成一个尽可能大的数。 析:很明显的一个DP题,首先不难想到这个dp[i][j] 表示前 i 根火柴,所能拼出的取模 m 为 j 的数,状态转移方程也很好写, dp[i][j] ==> dp[i+c[k]][(j*10+k)%m] 其中 k 为在后面添加的数,c 数组是用
阅读全文
浙公网安备 33010602011771号