ACM 动态规划
文章平均质量分 59
tmeteorj
你若想得到这世间最好的,得先让这世界看到最好的你。
展开
-
POJ 3046
题意:T种蚂蚁,共计A只,种内没有区别,问含有x只蚂蚁的子集有多少种(x∈[S,B])题解:动态规划,dp[i][j]代表用前i种蚂蚁凑成j只蚂蚁的集合的方法数,由于T*A太大,用滚动数组实现,最后输出的是答案mod 1000000#include#include#includeusing namespace std;int dp[2][100005],num[1005];con原创 2013-01-25 14:14:26 · 2040 阅读 · 1 评论 -
CodeForce#190 Div1
Problem A Ciel and Robot (数学)题意:机器人初始在(0,0),反复执行一个移动序列,问是否能够抵达(a,b)题解:找出机器人第一轮的所能到达的所有位置,然后根据最后一步到达与初始位置的偏移量(dx,dy)作为位移,看它第一轮到的所有位置(sx,sy)是否能找到一个非负整数n,满足sx+n*dx=a且sy+n*dy=b#include#include#inc原创 2013-07-13 18:20:22 · 2078 阅读 · 0 评论 -
CodeForce#191 Div2
POJ感觉刷的差不多了,剩下的题里面好多都是08年以前的陈题,参考意义已经不打了。然后根据队友推荐,开始做CF,CF还是不错的,有代码,有解题报告,有数据,很强大!这次做的是#191 Div2的题解:Problem A Flipping Game(枚举)题意:给你01序列,选出一段区间,把0变1,1变0,求最后最多有几个1.题解:作为第一题,数据也不是太大,可以直接暴力原创 2013-07-12 12:43:47 · 1121 阅读 · 0 评论 -
POJ 3042 Grazing on the Run
题意:有n个草,牛初始位置在L,要吃光所有的草,其中牛每单位时间走一个单位,且每棵草每个时间都会枯萎1个单位,求吃到草的枯萎度之和最小是多少。题解:dp[i][j][k]代表区间[i,j]的草已经吃光了,当前在第k个位置时吃剩下的草还需要付出的代价。将已经吃的草对后面草的影响提前算出来,这样在搜索的时候就不需要考虑前面花费了多少时间了,也就是如果吃第一棵草的时间是t,那么最后吃所有的草时间都会原创 2013-07-07 21:38:56 · 1521 阅读 · 0 评论 -
POJ 3265 Problem Solving
题意:P个问题,雇佣相同的人去解决,每个人每月解决一道题,每个人解决问题的代价都分两次,解决问题当月给a[i],事后第二月给b[i],然后每个月有m的钱,问最快多久解决所有问题。(问题必须按照序号一个个解决)题解:dp[i][j][k]代表第i个月解决完前j件事还剩k元钱所需要在下一个月支付的最小价格,由于空间比较大,所以用交叉dp的方法去更新。#include#include#inc原创 2013-07-07 20:28:56 · 1160 阅读 · 0 评论 -
POJ 1722 SUBTRACT
题意:给定一个长度为n的数组(1≤n≤100),进行n-1此操作,每次操作为:选择某一个位置i,用a[i]-a[i+1]替换掉原来的数据a[i]以及a[i+1](数组下标从1开始),使得数组长度减一。现在要求一个操作序列,使得最后剩余的那个数恰好等于T.题解:执行n-1次操作后,最后得到的值实际上可以表示成这样:a1 - a2 [] a3 [] a4...... [] an,[]内原创 2013-05-21 09:57:31 · 1153 阅读 · 0 评论 -
POJ 3003 Spiderman’s workout
题意:蜘蛛侠爬墙锻炼,总共爬n次,能上能下,但最后必须落在地面,且中途不能爬到地下去。要按照最优策略即爬的最高点必须要尽可能低。题解:典型DP题,dp[i][j]代表第i步爬到j高度时所爬过的最高点,同时用pr[i][j]代表上一次的高度,状态转移就一加一减就行了,最后dfs输出结果就行。#include#include#includeusing namespace std;int原创 2013-03-26 17:08:43 · 1397 阅读 · 0 评论 -
POJ 2951 Cake Cutting
题意:给定一个w*h的蛋糕,将其分成m份,也就是切m-1刀(必须保证每次都将一块蛋糕切成两份,按照水平或者竖直),求最后m份中最大的那份的面积最小是多少。题解:记忆化搜索,dp[k][i][j]为将一块i*j的蛋糕切k刀的最大面积的最小值,枚举下一刀的横竖以及切的位置和其中一份的刀数。#include#include#includeusing namespace std;const原创 2013-03-26 17:37:29 · 1272 阅读 · 0 评论 -
POJ 2373 Dividing the Path
题意:长度为L的区间,有N头牛有各自喜欢活动的区间(Si,Ei),喷水的喷头只能安装在整数点上,且它能喷到的半径在[A,B]之间,现在要求:用最少的喷水头不交叉的覆盖整个L,并且满足每头牛喜欢活动的区间里只有一个喷头再喷。题解:线段树优化DP,dp[i]代表喷完前i个地方所需要的最少喷头数,那么dp[i]=min(dp[j]+1),i-2b#include#include#includ原创 2013-03-25 16:50:21 · 2425 阅读 · 2 评论 -
POJ 3437 Tree Grafting
题意:给出一个树的中序遍历的上下情况,求这棵树的高度以及它转化为二叉树后的高度。题解:直接求树的高度比较简单,和求区间最大深度的算法一样,就是统计一下就行了;求二叉树的话,实际上这道题说了最多1w个结点,所以可以直接建一棵树,然后再深搜树形DP就行了。#include#include#includeusing namespace std;const int N=10000;cha原创 2013-04-01 17:04:20 · 1930 阅读 · 0 评论 -
POJ 1821 Fence
题意:连续的N块木板,有K个粉刷匠,分别坐在第Si块木板前,每个粉刷匠不能移动位置,且最多能粉刷连续的Li块木板(必须包括Si或者不要该粉刷匠),每个粉刷匠粉刷一块木板可以得Pi块钱,求总共的最大利益。题解:dp[i][j]代表前i个粉刷匠粉刷完成至多前j个木板的最大利益,状态转移有三种:1、不需要第i个粉刷匠,即前i-1个粉刷匠完成前j个木板的工作:dp[i][j]=dp[i-1][j]原创 2013-03-17 19:50:16 · 2644 阅读 · 1 评论 -
POJ 2355 Railway tickets
题意:在一条铁路上有n个站点,要从a到b。火车票有3种,距离题解:典型dp,dp[i]代表到达第i个站点的最小花费,然后用dp[i]更新从i出发能到达的站点,dp[j]=min(dp[j],dp[i]+price[i,j])#include#include#includeusing namespace std;int dp[10005],ds[10005];int main()原创 2013-03-11 18:36:47 · 1148 阅读 · 0 评论 -
HDOJ 1693
题意:给定N*M的矩阵,里面有些有树,有些没树(用0表示),问有多少种方法,通过任意个不交叉环路把树全连起来(就是哈密顿回路或者多个哈密顿回路覆盖所有非0数)题解:插头DP入门题,实际上,感觉插头DP也就是状态压缩DP的一种特例而已。若要学插头DP,请参见《基于连通性状态压缩的动态规划问题》,看了它,也就知道一些基本概念和解题思路了。这道题我的方法是dp[i][j][st]代表第i行格子,原创 2013-02-26 17:50:18 · 500 阅读 · 1 评论 -
POJ 1739 Tony's Tour
题意:给定n*m的带障碍格子图,求从左下角走到右下角的哈密顿路的总数。题解:更进一步的插头DP,主要解法可以参照我的上篇日志:http://blog.csdn.net/tmeteorj/article/details/8635090。改动之处在于单向插头,上篇中用01和10分别代表左右括号,这道题则需要加11作为单向括号(因为它在括号序列状态中是没有与之匹配的括号的)#include原创 2013-03-06 15:56:39 · 611 阅读 · 0 评论 -
Ural 1519 Formula 1
题意:找出N*M大小的带障碍格子的哈密顿回路总数。题解:插头DP进阶题,也是入门题,插头DP的详解还是看《基于连通性状态压缩的动态规划问题》论文吧。12列共13个插头,一共有3种插头,3进制可解,但用位操作处理2进制更容易,所以设成4进制,2位代表1个插头的状态,用括号表示法即 00:无插头;01:'(';10:‘)’,26位长度的状态是开不了的,所以用hash表进行优化处理,我用一个原创 2013-03-04 19:13:55 · 953 阅读 · 0 评论 -
POJ 1485
题意:n个加工厂,m个原料厂,原料厂地址与加工厂一致,m题解:dp[i][j]为前i个厂,j个原料厂最佳分配的总代价。另外,对于加工厂区间[a,b]用原料厂去覆盖的方法应该是建立在最中间那个点上,这样左右工厂数相等,到达它的距离之和最小。dp[i][j]=min(dp[k][j-1]+ds[k+1][i]),厂址位置就在(k+1+i)/2位置,可以用pre[i][j]记录该原料厂相关的原创 2013-01-19 15:05:32 · 1106 阅读 · 0 评论 -
ZOJ 3718 Diablo II
题意:K个技能,第i个技能满级Bi,加1级攻击力加Ci,加满后再额外增加Di攻击力。N件装备,第i件装备加Ai的攻击力,穿上它后会提升一些技能的等级1级(装备提升的等级不叠加)。现有X个技能点,Y个装备槽,问最大攻击力。(K题解:技能点最后再加,先穿装备,用二进制位压缩代表一个技能是否被装备提升,那么dp[mask][num]代表穿上num个装备,对mask这些技能提升一级的最大攻击力。然后对原创 2013-10-25 19:48:55 · 1145 阅读 · 0 评论