DP
asuxiexie
这个作者很懒,什么都没留下…
展开
-
hdu 1003 MAX sum (简单DP)
起始点是从头开始的,一直到后面搜索,一直到和为小于零,起始点就从开始小于零的后一位开始并把结果改为零,再搜索的过程中,一遇到大的数据就记录下来,把其计为起始点和终点的,这里面主要考虑到,当你搜索到一个位置的,它的和不小于零的,那对于后面来说,加上去还是会变大的,不会给变小的,所以要再搜索下去的,走一边就KO了。代码如下:#include#include#includeusing namesp原创 2014-07-29 15:09:34 · 565 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus(DP)
转移方程dp[i][j]=Max(dp[i][j-1]+a[j],max(dp[i-1][k] ) + a[j] ) 0此链接中有详解点击打开链接#include#include#includeusing namespace std;#define MAXN 1000000#define INF 0x7fffffffint dp[MAXN+10];int mma原创 2014-07-29 21:38:42 · 676 阅读 · 0 评论 -
hdu 1176 免费馅饼(dp)
对于每个位置的馅饼数目只上一秒它本身和左右位置的最大馅饼数有关。。也可将他看做数塔。。从后往前找最大值。。#include#include#include#include#includeusing namespace std;int s[11][100001];int yy[11];int e,f;int maxn(int y,int u,int k原创 2014-07-30 11:34:56 · 625 阅读 · 0 评论 -
HDU1159 最长公共子序列
被dp搞得不行不行的,找状态方程太难了。本题只是个基础题还好;状态方程为: if(s[i-1]==k[j-1])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=dp[i-1][j]>=dp[i][j-1]?dp[i-1][j]:dp[i][j-1];#include#includeint main(){ int a,b,i,j; char原创 2014-07-14 21:13:46 · 1093 阅读 · 0 评论 -
hdu 1087 简单dp
思路和2391一样的。。#include#include#include#includeusing namespace std;const int inf=(0x7f7f7f7f);int main(){ int a; int s[10005]; int w[10005]; while(scanf("%d",&a)&&a) {原创 2014-08-14 21:38:49 · 697 阅读 · 0 评论 -
hdu 2391 Filthy Rich
简单dp 水一个处理点的时候,第一行和第一列特殊处理;其余的w[i][j]=show(w[i-1][j-1],w[i-1][j],w[i][j-1])+s[i][j];#include#include#include#include#includeusing namespace std;int s[1005][1005];int w[1005][1005];//存每个点的最大原创 2014-08-14 21:36:58 · 768 阅读 · 0 评论