
动态规划(DP)
AndRing
这个作者很懒,什么都没留下…
展开
-
【DP+记忆化搜索】PKU-1390-Blocks
http://poj.org/problem?id=1390又是黑书上的一道坑爹题,不过话说越坑爹越能学到东西……这里就贴上黑书上的解析吧……分析 线性DP参照《算法艺术》上的算法题目的方块可以表示称color[i],len[i],1这里l表示有多少"段"不同的颜色方块color[i]表示第i段的颜色,len[i]表示第i段的方块长度让f[i,j,k]表示把(c原创 2012-02-27 00:43:03 · 461 阅读 · 0 评论 -
【树形dp】PKU-2486-Apple Tree
在原来很裸的树形dp上加了些限制条件,不过知道状态转移还是很好做的,但状态转移不好想啊,都是看了人家的结题报告后才知道的!题目#include#include#include#include#include#include#include#includeusing namespace std;#define FRE freopen("a.txt","r",stdin)原创 2012-03-23 01:00:09 · 562 阅读 · 0 评论 -
【dp】HUST-1351-Group
很好的一道dp,它的状态转移真的是太巧秒了!题意:给出一段数列,要求你将这段数列分割成最多k段且每段的个数不能少于l的数列,然后求一个和,它是由一段中所有数字的总和乘以这一段的段数,即这一段是第几段,然后把所有这样的和加起来得到的,问这个和最小是多少!思路:先用sum[i]数组表示1到i这段数列的总和,数组dp[i][j],表示的是将1到j这段数组分割成i段的最小值。所以状态转移为:t原创 2012-04-01 09:21:36 · 600 阅读 · 0 评论 -
【树状数组】PKU-2057-The Lost House
这里有挺完整的题解:http://blog.youkuaiyun.com/find_my_dream/article/details/4864657题目#include#include#include#include#include#include#include#includeusing namespace std;#define FRE freopen("in.txt","r原创 2012-03-16 12:45:22 · 501 阅读 · 0 评论 -
【树状数组】PKU-2152-Fire
一道处理的很巧妙的树状数组……都是参考大牛的代码的……题目大牛题解#include#includeusing namespace std;template T Max(T x,T y){return x>y?x:y;}template T Min(T x,T y){return x<y?x:y;}#define N 1005#define inf 999999999原创 2012-03-14 20:01:23 · 514 阅读 · 0 评论 -
【dp+dfs】VK Cup 2012 Round 1-D. Distance in Tree
dp+dfs好题,状态转移写得很赞……dp[i][j中的i表示以第几个点为中心,j长度,综合起来表示以i为中心长度为j的边的总数……题目#include#includeusing namespace std;int k;__int64 ans,dp[50005][505];vector v[50005];void dfs(int x,int y){ int i,j,z;原创 2012-03-12 17:47:05 · 655 阅读 · 0 评论 -
【树形dp】ZOJ-3326-Tree of Tree
这道题和昨晚在CF上做的一道题很像,都是树形dp。刚开始时,我写了个很烂的代码水过了,时间复杂度为O(n^3).不过一看觉得不对了,人家的都是0ms的,于是去网上找题解优化,时间就降为O(n^2)了,终究还是自己太水了……题目优化前,300ms:#include#include#include#includeusing namespace std;template T M原创 2012-03-12 21:07:04 · 601 阅读 · 0 评论 -
【树形dp】PKU-3345-Bribing FIPA
dp[i][j]表示在以i为根的树选j个国家的最少费用,具体思维看代码……题目#include#include#include#include#include#include#include#includeusing namespace std;#define FRE freopen("a.txt","r",stdin);#define inf 999999999原创 2012-03-26 20:54:31 · 803 阅读 · 0 评论 -
【树形dp】PKU-3107-Godfather
题目要求找到这样的一个点,当删除这个点后使得形成的深林的最大的子树的节点最小。而且这些点可能有多个,请一一输出。其实这道题就是1655的翻版,不过在这道题中不能用stl中的vector,因为会超时,所以要用邻接表来存储。题目#include#include#include#include#include#include#include#includeusing name原创 2012-03-23 14:43:32 · 440 阅读 · 0 评论 -
【DP】-Codeforces Round #110 (Div. 1)-C. Cipher
个人觉得很神奇的一道DP……题目要求求出给出字符串经过题目要求的变换可以得到多少各不同的字符串。可以证明的是,这些字符串加起来的和都一样,所以dp[i][j]的i表示的是字符串的长度,j表示的是字符串所有字母加起来的和,状态转移方程为dp[i+1][j+k]+=dp[i][j](1题目#include#includeusing namespace std;#define mo原创 2012-03-02 01:18:48 · 546 阅读 · 0 评论 -
【DP+记忆化搜索】PKU-1191-棋盘分割
题目sum[x0][y0][x1][y1]表示的是左上角为(x0,y0),右上角为(x1,y1)的矩形的每个点分数总和的平方;dp[n][x0][y0][x1][y1]表示的是左上角为(x0,y0),右上角为(x1,y1)的矩形再经n刀切到的方差的平方加上平均值的平方的和再乘以n……状态转移方程为dp(n, x0, y0, x1, y1)=Min( Min( dp[n-1, x0, y原创 2012-02-27 23:25:30 · 562 阅读 · 0 评论 -
【DP,状态压缩】PKU-1038-Bugs Integrated, Inc.
黑书上的一道较难的DP,用到了三进制状态压缩……虽然开始时有点思路,但是很多细节都不会处理,只能模仿人家的代码了……菜……有三个状态,0表示前两行为空,1表示只有前一行为空,2表示前一行不空……dp[i][j],i表示第几行,j表示某一种状态……#includeusing namespace std;int m,a[10],b[10],c[11];short dp[151原创 2012-02-25 22:41:38 · 786 阅读 · 0 评论 -
【最小点覆盖(树形dp)】PKU-3659-Cell Phone Network
题意:一棵树,,删掉一个节点,,可以消灭自己和与其相邻的节点,,,问最少删掉几个节点可以消灭所有的节点?思路:树形dp,分三个状态,首先dp[i][j]表示以这点为跟的子树的后代都被消灭了,而dp[i][0]不删除且不被其相邻的点消灭,dp[i][1]表示这点不删除但被其相邻的点消灭,dp[i][2]表示这点删除,然后就是不同状态之间的转移了,具体看代码。题目#include#i原创 2012-04-18 02:17:55 · 680 阅读 · 0 评论