LeeBlog

导航

随笔分类 -  DP

上一页 1 2

HDU 1231 最大连续子序列
摘要:这题是一郁闷题,开始我想了好久没思路,最后想到前面不是做了几个类似的DP么,只要把前一个的最大子序列找到了,那当前这一个的最大子序列就好办了,因此又是一个从前往后解决的问题,不过要注意最后一组测试数据,我在这里错了好几次#include<stdio.h>#include<string.h>int k,num[10024],add[10024],pri[10024],pos;void cal( ){ int m = 0; for( int i = 1; i <= k; ++i ) { if( (add[i-1] + num[i]) > 0 && 阅读全文

posted @ 2011-04-22 17:12 LeeBlog 阅读(629) 评论(0) 推荐(0)

HDU 1176 免费馅饼
摘要:这题是一最优子结构的题,我开始暴力,结果一直TLE,最后听小白说这是一最优子问题,极像数塔,怎么像呢。这每一秒不就像极了每一层么,而且是从上往下时间增大的,为什么从下往上呢?因为要只到第一秒选哪个最大,就必须知道第二秒的分布情况,而要知道第二秒选哪个,就必须知道第三秒的情况,同理,可以一直往下推。这样不久像极了一个数塔么,要先解决下面的才知道上面的,而没一层的每一个又跟哪个有关系呢?显然由题意有每个只跟下面的三个有关,而且第0个和最后一个要特殊出理,所以有ch[y][++x]#include<stdio.h>#include<string.h>int n,ch[1000 阅读全文

posted @ 2011-04-20 19:12 LeeBlog 阅读(201) 评论(0) 推荐(0)

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP
摘要:这是一道简单的DP,应该从前面往后面找,结果我一开始用递归,从后面往前面找,悲剧了很久这里的思想是先从第一个开始找到第一个的最优解,然后第二个,第三个。。。。而为什么要一个一个来求呢,那是因为后面的都是通过前面的来找最优解(dis[j] > max && num[j] < num[i] ),最后把全部的最优解都找到,而本题求的是全题的最优解,所以还要找到全局的最优解( Max )。#include<stdio.h>#include<string.h>int n,num[10000],dis[10000];int cal( ){ int Max 阅读全文

posted @ 2011-04-18 16:25 LeeBlog 阅读(181) 评论(0) 推荐(0)

HDU 2084 数塔 简单DP
摘要:这题是一水题,只需从第一层一直往下面找子树中较大的那一个就可以了,很快水了,不过用codeblocks编得郁闷,codeblocks上编译都过不了,直接提交就水了#include<stdio.h>int n,inf = 0x7fffffff,des[10000],num[10000];int cal( int sum,int i,int j ){ if( num[sum + j] == inf ) return 0; if( des[sum + j] ) return num[sum + j]; des[sum + j] = 1; if( j > i ) { sum += i 阅读全文

posted @ 2011-04-17 21:58 LeeBlog 阅读(191) 评论(0) 推荐(0)

HDU 1028 Ignatius and the Princess III 母函数 模板 or 完全背包
摘要:这题是母函数的一模板题,如果你还不知道什么叫母函数,请去网上下载卢华明,卢开澄的<组合数学>,或者去tankywoo那里把原理看懂,http://www.wutianqi.com/?p=596。里面的第二章把母函数的原理分析得很透彻,下面讲代码实现.其实下面代码就是电脑模拟人工计算,而且很有规则,是从第一个括号开始算起,先把第一个括号跟第二个括号相乘,然后这两个括号就合并了,然后又把第一个括号跟第二个括号相乘,知道n个括号全部被算出来(i 就代表第几个括号正在被合并);我想大家肯定对m2[j + k] += m1[j]很疑惑,是的,我也在这卡了很久.我开始总以为这是什么公式,结果一 阅读全文

posted @ 2011-03-26 20:44 LeeBlog 阅读(451) 评论(2) 推荐(1)

上一页 1 2