dp
文章平均质量分 76
Beating_spark
Even a beating_spark can light a fire of wisdom!
展开
-
hdu 1074 doing homework
思路:纪录每个状态的最小花费dp[i] 然后转移 转移的时候要用到位运算 用111)]转移而来 然后全部取最小的 ,但是这个地方的转移顺序很需要注意! 选择j的时候要n-1 to 0 因为要用字典序最小的状态转移而来 所以字典序排序应该是j越大 之前的状态字典序越小 #include #include #include #include #include原创 2016-05-28 12:16:42 · 204 阅读 · 0 评论 -
dp tsp问题 海贼王之伟大航路
TSP问题是一个np问题 但是我们可以通过伪多项式算法来实现 就是用状态压缩dpdp[i][j]:i是目前已经走过的城市的状态 j是在此状态下最后一个到达的城市 dp[i][j]表示到此时的最小用时 如果状态转移不合法 设置为-1 那怎么来递推呢 我们想一想 如果一个i要从 00000000001(二进制表示) 走过来 那么所走的状态一定都是小于i的 比如 i=000000101 要从原创 2016-07-21 21:13:55 · 745 阅读 · 0 评论 -
dp 计数问题 复杂整数划分 区间dp
百练的题目 : 让我对dp有了新体会 这是记忆化搜索写法 省了很多时间 并且状态转移的方式符合我们的认知 这个通过递推很难发现关系 但是讲区间搜索一下分解的话就可以计数了 并且在不影响结果的前提下自己规定了拿走数字的大小的方式和拿走的方向(能体会到这一点就好,这是写出来dp的关键 可以用复杂状态来表示准确的dp)三段solve 分别对应 三个问题#include #include #原创 2016-07-19 21:32:29 · 800 阅读 · 0 评论 -
百练 1088 dp
1088:滑雪查看提交统计提示提问总时间限制: 1000ms 内存限制: 65536kB描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例原创 2016-07-18 22:28:18 · 613 阅读 · 0 评论 -
dp 最佳加法表达式
有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少 思路 :这个问题我们不知道最优的加号放置方式 ,不妨可以从最后一个加号开始枚举,每次枚举一个之后记忆化递归下一个,效率非常高 提前预处理字符串也是很关键的。用dp[i][j]表示在前j个数字中插入i个+号所能形成的最小值.1.如果i==0 那么直接返回dp[0][原创 2016-07-18 21:13:29 · 778 阅读 · 0 评论 -
hdu 2059 龟兔赛跑 水题
这个题目题意有问题 怪不得我怎么做也a不了 到了一个充电站以后 电会自动清零 你有两个选择 充 或者不充 所以这个状态转移方程就巨简单了 dp[i]=min(dp[i],dp[j]+time);#include #include #include #include #include #include #include #include #include #include #原创 2016-06-02 16:17:41 · 423 阅读 · 1 评论 -
dp poj3186
FJ has purchased N (1 The treats are interesting for many reasons:The treats are numbered 1..N and stored sequentially in single file in a long box that is open at both ends. On any day, FJ ca原创 2016-06-01 20:39:33 · 193 阅读 · 0 评论 -
dp 略难 poj1661
这个题目状态就是每块板到左边和到右边的最短时间 然后转移的时候要对结构体排序高度从大到小 可以递推过来 也可以用记忆搜索 做这个题目的时候wa了好长时间 后来才意识到转移的时候中间不能有别的板挡着。。。。。 然后里面写了个循环暴力 但是tle了 怎么办?优化一下代码 想一下随即数据很容易产生覆盖的 然后两边都不能合法转移了 所以那么多循环次数没用 当两个都为0之后直接跳出循环就好了#i原创 2016-05-31 22:20:05 · 231 阅读 · 0 评论 -
poj 1015Jury Compromise
这个题目真的困扰了对于还是新手的我2个小时以上 首先状态转移方程还是很好找的 通过数据范围一下就看出来了 直接拿差值当作其中的状态参数dp[i][j]表示选择了i个物品 差值为j的时候的最大的和 并且有path[i][j]纪录前驱元素 然后dp就可以了 注意有几点 1. j有正有负 所以要对他进行平移; 2. 其中选择每一个物品的时候 一定要有一个函数判断之前的状态有没有重复 这个直接原创 2016-05-29 18:16:01 · 225 阅读 · 0 评论 -
hdu 1160
这个题目简单 但是wa了很久 一直找不到自己错在哪里 最后对比了一下别人代码 终于发现原来dp要初始化为1 以后要细心!#include #include #include #include #include #include #include #include #include #include #include #include #include #define p原创 2016-05-28 20:30:08 · 173 阅读 · 0 评论 -
hdu 1114的反思与总结
二话不说 先上代码#include #include #include #include #include #include #include #include #include #include #include #include #include #define pi acos(-1)#define e exp(1)#define inf 0x3f3f3f3fu原创 2016-05-28 16:30:15 · 184 阅读 · 0 评论 -
gcj 2008 apac problem c
#include#include#include#include#define MAX_M 25using namespace std;typedef long long ll;int M,X;int T,temp;double P;double dp[2][(1<<MAX_M)+1];void solve(){ int n=1<<M; double *pr原创 2016-11-24 18:20:12 · 262 阅读 · 0 评论