随笔分类 - dp
摘要:#1290 : Demo Day <!-- parameter: @time_limit @case_time_limit @memory_limit @description @sample_input @sample_output --> 时间限制:10000ms 单点时限:1000ms 内存限
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2089题意:给定 m,.n;求车牌号 m~n之间 有多少数字 不含 4或62 ,8652是可以的 。Sample Input1 100 0 0Sample Output80 1 #include 2 #include 3 #include 4 #define maxn 11 5 int dp[maxn][11] ; 6 using namespace std; 7 void init() 8 { 9 int i,j,k;10 11 memset(dp,0,sizeof(dp));12...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4293题意:有 n 个人,可任意分成若干组,然后每个人各提供一个信息,表示他们组前面有多少个人,后面有多少个人。问最多有多少个信息是不冲突的。题解: dp;首先 我们 可以将 这 n 个人的 位置 看作是 区间 1---n 这样 说 每一个人说 其所在的组 前面 有 a 个人 后面 有 b 个人 那么 他的 组就 就在 a+1 到 n - b ;我们将 说的情况相同的 人数 记录下来 (按照 其端点大小排序),这样 问题就变为了 在 1--n 这个区间上 不相交的 (带权 )区间的 的 和的 权值 最大为 多
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4272题意:题意:长度为n(n<=1000)的栈,栈顶元素可以与下面1~5个数中相同的元素消去,问最后能都完全消去。题解:状态压缩 dp 如何判断一个 物品 是否可以 被删除 ,首先 最坏的 情况是 2 0 0 0 0 1 1 1 1 2 假如我们要消除 栈顶的 2 ,0表示已经被删除了。我们要 知道 包括 本身在内的 10 个 数位 dp[h][i] 表示 高度 为 h 状态 为 i 能否 全部 消除 1 表示可以 0表示 不可以 1#include<cstdio>2#include<
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4283题意:The TV shows such as You Are the One has been very popular. In order to meet the need of boys who are still single, TJUT hold the show itself. The show is hold in the Small hall, so it attract a lot of boys and girls. Now there are n boys enrolling...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4385状态压缩需要好好理解啊; 又是一道 状态压缩的题 ,一开始觉的和 poj 的一道题有点像 ,特地先做了一下那个题 再回来做的这道题,结果还是没做出来 这到,最后看了 解题报告:题意:一个人在搬砖,初始位置在(x0,y0),目的地也是(x0,y0),给你n(n<=20)块砖的位置(xi,yi),规定两点之间时间耗费为欧几里德距离的平方,此人一次可以搬不超过两块砖,问你最少的时间花费并给出方案.官方题解:简单状态DP.需要注意的是,由于耗费的时间是路长的平方,所以一次性取两点的代价并不一定比分两次取小
阅读全文
摘要:http://poj.org/problem?id=2817这个题的意思是第一行给出case数N (1 <= N <= 10),然后给出N个单词,每个一行,当输入不是正整数的时候结束。每个单词最多10个字母。 Sample Input 5 abc bcd cde aaa bfcde 0 要求的是,按任意顺序排列这些单词,可以在单词前面加任意个空格,使得相邻的单词上下对应的字母数目最多,并输出最多是多少。 Sample Output 8 比如sample里面的8,是这样得来的: aaa abc bcd cde bfcde 注意只有相邻单词的字母上下对应才算对应。/*由于每两个...
阅读全文
摘要:acm.hdu.edu.cn/showproblem.php?pid=4374题意:有n层,每层有m个part。在一层中你只能向着一个方向移动(左或者右),最多能移动T步, 经过每个部分是都能得到这个部分的分数。起始位置在x位置,从第一层到最顶层能得到最多的分数题解:dp + 单调队列 ;对于 左边我们可以得到 dp[i][j] = max( dp[i - 1][k] + sum(k, j)) j - t <=k <= j;我们的队列 要维护的 就是dp[i - 1][k] + sum(k, j)由于 sum (k ,j) 单调队列要维护的状态必须是和 现在的状态 无关(或着说是
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4362做这道题是 ,一眼看出来是 dp ,写了个 一般的dp 复杂度 m*n*n 直接 tle 好伤心。。。想着怎么优化 ,但实在是不知道啊,后来看了 解题报告,明白了。。。。。官方解题报告: 设dp[i][j]表示第i批龙珠中取第j个需要花费的最小体力。dp[i][j] = min{ dp[i-1][k] + abs(pos[i-1][k]-pos[i][j]) } + cost[i][j];如果枚举k的话总复杂度位m*n*n,会超时。可以看出若每个状态只由上一层位置在其左边的状态的转移而来的话: dp[i
阅读全文
摘要:http://poj.org/problem?id=1947Rebuilding Roads Time Limit: 1000MSMemory Limit: 30000KTotal Submissions: 7061Accepted: 3092DescriptionThe cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't hav
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。题解:树形dpdp[r][0] 表示 以 r 为根的 子树 在 r 上 不放 士兵 的 最小值dp[r][1] 是放士兵的最小值 (他的 字节的 既可以放 ,也可以 不放)dp[r][0] = ∑ dp[j][1] j 为 r 的 子节点dp[r][1] = ∑ min( dp[j][1],dp[j][0] ) + 1;1#include<std
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2412 题目大意:n个人形成一个关系树,每个节点代表一个人,节点的根表示这个人的唯一的直接上司,只有根没有上司。要求选取一部分人出来,使得每2个人之间不能有直接的上下级的关系,求最多能选多少个人出来,并且求出获得最大人数的选人方案是否唯一。树形dp+判断 状态转移方程: 对于叶子节点 dp[k][0] = 0, dp[k][1] = 1 对于非叶子节点i, dp[i][0] = ∑max(dp[j][0], dp[j][1]) (j是i的儿子) dp[i][1] = 1 + ∑dp[j][0] (j是i的..
阅读全文
摘要:题意:一个row*col的矩阵,每个格子是0或者1,1表示土壤肥沃可以种植草地,0则不可以。在种草地的格子可以放牛,但边相邻的两个格子不允许同时放牛,问总共有多少种放牛的方法?(不放牛也算一种情况)http://poj.org/problem?id=3254 /*折腾了 半个下午 和一个晚上 ,终于 把这道 状态dp 的题给 A 了,兴奋一下。。。。前后想了 三个状态方程,前两个 被 k 掉了我的一个错的 状态方程是 dp[r] = (第 r 行 合适的状态 个数) * dp[r - 1]; dp[r] 表示 从 第 0行 到 第 r 行的最大值 这个 最后 验证是错的 ,忽略了 r-1 ..
阅读全文
摘要:http://poj.org/problem?id=1185炮兵阵地 Time Limit: 2000MSMemory Limit: 65536KTotal Submissions: 13114Accepted: 4806Description司 令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击 范围如图中黑色区域所示: 如果在地图中的灰色
阅读全文
摘要:http://poj.org/problem?id=2948意:一个row*col的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。如图所示,最北边有bloggium的收集站,最西边有 yeyenum 的收集站,要你在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿(yeyenum+bloggium)? 这道 dp 1A,完全自己写的,有点小兴奋,dp菜鸟在进步。。。。。。。,首先 开始想时想了一个 dp 方程 最后验证是错的;后来自己有想了一下 ,得到了正确的 状态方程dp[i][j][0] 表示 以 i,j 为右
阅读全文
摘要:http://poj.org/problem?id=2029题意: 一个 矩形内有 许多树,给你 一个 长和寬一定的 小矩形,问最多 能 用小矩形 盖住多少棵树枚举求和: 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<iostream> 5 #include<algorithm> 6 #include<set> 7 #include<map> 8 #include<queue> 9 #include<ve
阅读全文
摘要:http://poj.org/problem?id=3280又是一道 dp 题目 一开是 有点 小思路,认为他就是括号匹配的变形吗,可是后来,越想月觉的麻烦,(后来才知道 自己 向的太多了,)一开始 认为他 可以 在任意位置 插入和删除 有一定的费用 ,怎么个dp 法呀,后来看了解题报告 ,确实和 括号匹配一样,我太菜了。。。。题意: 一个字符串 求将其 变为回文串的最小花费 ,每个 字母 添加 和删除 都要一定的花费;dp[i][j] 表示 将 str[i -----j] 变为 回文串的最小花费if(str[i] == str[j]) dp[i][j] = dp[i + 1][ j - 1]
阅读全文
摘要:好纠结的一道题啊,一开始 写错了个字母 ,跳了半天,后来脚上去竟然不对,,看了 discuss 里面的 将 所有数据 改为 double 类型 秒过,汗。。。。。。。。。 棋盘分割Time Limit: 1000MSMemory Limit: 10000KTotal Submissions: 9151Accepted: 3215Description将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4359好纠结的一道dp 题啊,比赛是 倍他的 2 的所烧次方迷惑住了 ,没想出来看了解题报告,才知道,用dp 那样做。。。, 自己还是很弱啊,想不出来通过此题我对dp 又有了 更多的了解题目大意:给你n个节点,第i个节点的权值为2^(i-1),求满足以下条件的深度为d的二叉树的个数(最后结果对maxmod=109+7取余):左子树权值之和小于右子树权值之和,当只有一个子树时可以不满足这个条件。5000个测试点,n,d<=360题解:1.首先注意f[n][d]的结果是一定的,所以先预处理出来所有的f[n]
阅读全文
摘要:题意 :有 n个 物品 价值 为a[i],个数为 b[i];求解 能够组成m以内的多少个数题解 :可以认为 到过来想 ,容量 i 被完全装满 ,按 完全装满算 即可#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#include<set>#include<map>#define Min(a,b) a>b?b:a#define Max(a,b)
阅读全文
浙公网安备 33010602011771号