11 2013 档案

POJ2411 - Mondriaan's Dream(状态压缩DP)
摘要:题目大意 给定一个N*M大小的地板,要求你用1*2大小的砖块把地板铺满,问你有多少种方案? 题解 刚开始时看的是挑战程序设计竞赛上的关于铺砖块问题的讲解,研究一两天楞是没明白它代码是怎么写的,智商捉急,上面是用逐格进行转移的,据说神马插头DP。。。坑爹啊。。。然后果断放弃研究了。。。我们还是逐行的进行转移,这样比较好理解,方程表示为:dp[i][j]+=dp[i-1][k](能够从上一行的状态k转... 阅读全文

posted @ 2013-11-27 19:16 仗剑奔走天涯 阅读(395) 评论(0) 推荐(0) 编辑

POJ3254 - Corn Fields(状态压缩DP)
摘要:题目大意 给定一个N*M大小的土地,土地有肥沃和贫瘠之分(每个单位土地用0,1来表示贫瘠和肥沃),要求你在肥沃的单位土地上种玉米,如果在某个单位土地上种了玉米,那么与它相邻的四个单位土地是不允许种玉米的,问你有多少种种玉米方案。(不种一算一种方案) 题解 很基础的状态压缩DP,我们可以逐行的进行状态转移,用二进制来表示一行的状态,方程表示为:dp[i]j]+=dp[i-1][k],表明我们可以从上... 阅读全文

posted @ 2013-11-26 16:24 仗剑奔走天涯 阅读(330) 评论(0) 推荐(0) 编辑

SRM 596 DIV 2
摘要:前段时间终于配置好了TopCoder的环境,所以就拿这场的DIV2练习了一下1. 250pt FoxAndSightseeing题意给你n个城市的位置,他们在同一直线上,要求你跳过其中某一个城市,按顺序依次访问其他的城市,求距离的最小值题解由于数据规模为n position) { int ans=INF; for(int i=1;i0的最大整数。给定lo,hi,和p(是一个素数),请你计算loms;LL getAns(LL r,LL p){ ms.clear(); LL ans=0; for(LL i=... 阅读全文

posted @ 2013-11-23 17:59 仗剑奔走天涯 阅读(196) 评论(0) 推荐(0) 编辑

HDU4276 - The Ghost Blows Light(树形DP)
摘要:题目大意 给定一棵n个结点的树,每个结点上有一定数量的treasure,经过每条边需要花一定的时间,要求你从结点1出发,在不超过时间T的情况下,最多能够获得的treasure是多少,并且要求结束于结点n 题解 本题主要的困难是如何恰好结束于结点n。 先进行一次dfs求出从结点1到结点n的最短时间s(假设此条路径为a),如果s比T还大,不能走完,输出-1。否则的话继续处理,由于路径a是最短路径,因此... 阅读全文

posted @ 2013-11-21 00:42 仗剑奔走天涯 阅读(322) 评论(0) 推荐(0) 编辑

POJ2486 - Apple Tree(树形DP)
摘要:题目大意 给定一棵n个结点的树,每个结点上有一定数量的苹果,你可以从结点1开始走k步(从某个结点走到相邻的结点算一步),经过的结点上的苹果都可以吃掉,问你最多能够吃到多少苹果? 题解 蛋疼的问题就是可以往回走~~~~想N就木有想到解法,看了下网上的解题报告~~~~想到了其实还是挺容易理解的~~~分为两种情况,就是有些点只需要走一次,而有些则需要走两次。 方程表示: dp[0][u][j]表示从结点... 阅读全文

posted @ 2013-11-21 00:11 仗剑奔走天涯 阅读(173) 评论(0) 推荐(0) 编辑

POJ1947 - Rebuilding Roads(树形DP)
摘要:题目大意 给定一棵n个结点的树,问最少需要删除多少条边使得某棵子树的结点个数为p 题解 很经典的树形DP~~~直接上方程吧 dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]-1) 方程的意思是 以u结点为根保留j个结点需要删除的最少的边的条数,那么可以选择在某个子结点v中选择k个保留,其他结点保留j-k个,为什么需要-1呢,因为相当于把子树v衔接到结点u上,因此边... 阅读全文

posted @ 2013-11-17 22:37 仗剑奔走天涯 阅读(212) 评论(0) 推荐(0) 编辑

POJ1155 - TELE(树形DP)
摘要:题目大意 电视台要直播一场比赛,电视网络刚好形成了一棵树,其中有M个为客户端,其他的为中转站,其中中转站与中转站以及中转站与客户端之间连接都需要一定费用,每个客户i愿意支付pay[i]元钱,问电视台在不亏损的情况下,最多可以让多少个客户观看比赛 题解 每个客户要么选要么不选,和01背包差不多,只不过这是在树上进行,我们用dp[u][j]表示以u为根节点选择j个客户的能够获得的最大盈利,dp[u][... 阅读全文

posted @ 2013-11-17 18:22 仗剑奔走天涯 阅读(193) 评论(0) 推荐(0) 编辑

HDU4003 - Find Metal Mineral(树形DP)
摘要:题目大意 给定一棵n个结点的树,每条边有一个花费,有k个机器人从点s出发,让它们遍历所有的边,最小花费是多少? 题解 完全没思路。。。。看了他的题解再写的~~ 代码: #include #include #include #include using namespace std;#define MAXN 10005struct node{ int v,next,w;};node edge[2... 阅读全文

posted @ 2013-11-17 15:58 仗剑奔走天涯 阅读(144) 评论(0) 推荐(0) 编辑

CF29D - Ant on the Tree(DFS)
摘要:题目大意 给定一棵树,要求你按给定的叶子节点顺序对整棵树进行遍历,并且恰好经过2*n-1个点,输出任意一条符合要求的路径 题解 每次从叶子节点开始遍历到上一个叶子节点就OK了, 这个就是符合要求的路径 代码: #include #include #include #include #include using namespace std;#define MAXN 305vectorG[MAXN],... 阅读全文

posted @ 2013-11-17 14:27 仗剑奔走天涯 阅读(293) 评论(0) 推荐(0) 编辑

算法纲要
摘要:基本C/C++、STL(vector、set、map、queue、string、algorithm)枚举、贪心、递归、分治、递推、模拟构造、位运算、常数优化数据结构队列、堆、栈、链表排序(插入、冒泡、快速、归并、堆、桶、基数)二分查找、散列表、并查集、哈夫曼树排序二叉树、左偏树、平衡树(Splay/... 阅读全文

posted @ 2013-11-14 22:31 仗剑奔走天涯 阅读(584) 评论(0) 推荐(1) 编辑

HDU2196 - Computer(树形DP)
摘要:题目大意 给定一颗n个结点的树,编号为1~n,要求你求出每个结点能到达的最长路径 题解 用动态规划解决的~~~~把1 当成树根,这样就转换成有根树了。我们可以发现,对于每个结点的最长路,要么是从子树得到要么是从父亲得到我们用数组f,g,h分别记录从当前结点到子树能够获得的最大值和第二大值以及从当前结点到祖先能够获得的最大值。我们先进行一次dfs,把f和g值求出来,然后再进行一次dfs求出h的值来,... 阅读全文

posted @ 2013-11-11 01:00 仗剑奔走天涯 阅读(217) 评论(0) 推荐(0) 编辑

HDU4607 - Park Visit(树的直径)
摘要:题目大意 给定一颗树,要求走过其中连续的k个点,使得步数最少 题解 每条边要么经过两次,要么一次,因为我们的目标就是使得走一次的边尽量的多,这样就转换成求树的直径了,求树的直径我用的是两次dfs,先随便从一个点开始dfs,找出以这个点为根距离它最远的结点,假设为s,然后再从s结点进行一个dfs,距离s结点最远的点与s点的距离就是树的直径(假设为d),最后判断一下k和树的直径的大小,如果k-1小于树... 阅读全文

posted @ 2013-11-10 23:43 仗剑奔走天涯 阅读(234) 评论(0) 推荐(0) 编辑

HDU1520 - Anniversary party(树形DP)
摘要:题目大意给定一颗树,每个结点有一个分值,父亲结点和子结点不能同时选,问你最多能获得的分值是多少?题解第一次独立做出树形DP来(虽然很水),撒花庆祝一下,哈哈~~~话说树形DP和记忆化好相似的说~~~(似乎没区别?)。用dp[root][0]表示以root为根的子树不选root能够获得的最大值,dp[root][0]=max(dp[son(root)][1],dp[son(root)][0]),同理dp[root][1]表示以root为根的子树选择root能够获得的最大值,只需把root的所有子节点形成的子树并且不选子节点能够获得的最大值全部加起来就是dp[root][1],即dp[root][ 阅读全文

posted @ 2013-11-04 14:45 仗剑奔走天涯 阅读(191) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示