随笔分类 -  动态规划

动态规划
摘要:1.poj 2342 题意:邀请同事参加party,保证职员与直接上司不一起参加,每个人有个搞笑值,求邀请所有人的最大的搞笑值总和。 DP部分:dp[0][i]表示职员i不来参加party,以i为根的子树的最大搞笑值,dp[1][i]表示职员i来参加party,以i为根的子树的最大搞笑值。 所以DP状态转移方程为: dp[0][u] = 所有儿子v的(max(dp[0][v], dp[1][v]))之和; dp[1][u] = 所有儿子v的(dp[0][v])之和 + val[u];View Code 1 #include<iostream> 2 #include<cstdi 阅读全文
posted @ 2012-08-08 15:46 hankers 阅读(1306) 评论(0) 推荐(0)
摘要:1.poj 1185 题意:炮兵阵地有n行m列,n<=100,m<=10,故可以使用将每行放置大炮的情况状态压缩为二进制的形式。 状态数目最多约为60种,dp[r][i][k]表示在r行状态为k,r-1行状态为i,前r行最多可以摆放的大炮数目。 之后枚举r行 状态转移:dp[r][j][i] = max{dp[r][j][i],dp[r-1][k][j]+sum[i]} 最为关键的是将题目模型化嵌套入状态压缩的模型,而且要熟悉各种位运算的用法。View Code 1 #include<iostream> 2 #include<cstdio> 3 #inclu 阅读全文
posted @ 2012-08-06 15:57 hankers 阅读(276) 评论(0) 推荐(0)
摘要:状态压缩动态规划动态规划的状态有时候比较难,不容易表示出来,需要用一些编码技术,把状态压缩的用简单的方式表示出来。典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。*:一般有个数据 n<16 或者 n<32 这个很可能就是状态DP的标志,因为我们要用一个int的二进制来表示这些状态。要注意好这些数据规模的提示作用。*:确定了为状态DP,那么第一步就是预处理,求出每行所有可能的状态了,cnt记录总的状态数,stk[]记录所有的可能状态。以炮兵阵地为例:int cnt, stk[MAX];void findStk(int n){//求出所有可能的状态。 for(i 阅读全文
posted @ 2012-08-05 21:06 hankers 阅读(326) 评论(0) 推荐(0)
摘要:此题大意讲的是有n种类型不同的砖块(a,b,c),且每种类型的砖块可以有无限个,垒高但要保证上面砖块的长宽小于下面砖块的长宽,求其最大高度。由于不确定a,b,c哪个为高,故扩展为3×n个砖块,若将砖块的长排序,只需比较宽。接下来就有点像背包了,从后往前一一确定当前状态下的最大高度。 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 struct block 6 { 7 int x,y,z; 8 }b[100]; 9 10 int max(int a,int b)11 {1 阅读全文
posted @ 2012-02-18 10:40 hankers 阅读(256) 评论(0) 推荐(0)
摘要:题目: Crossing River Time Limit:1000MSMemory Limit:10000KB64bit IO Format:%I64d & %I64uDescriptionA group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be ar... 阅读全文
posted @ 2012-01-20 21:22 hankers 阅读(305) 评论(0) 推荐(0)
摘要:题目: G -Max Sum Time Limit:1000MSMemory Limit:32768KB64bit IO Format:%I64d & %I64u hdu 1003DescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this... 阅读全文
posted @ 2012-01-18 22:10 hankers 阅读(443) 评论(0) 推荐(0)
摘要:题目: J -I NEED A OFFER! Time Limit:1000MSMemory Limit:32768KB64bit IO Format:%I64d & %I64u DescriptionSpeakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakle... 阅读全文
posted @ 2012-01-18 21:39 hankers 阅读(458) 评论(0) 推荐(0)