poj 2181 Jumping Cows ——简单DP
2011-07-30 22:50
381 查看
大意:一群牛想要跳到月亮上面去,但是他们现在跳的能力为零。现在给你一些药水,能改变他们跳的能力。不能改变药水的顺序。当跳奇数跳的时候,就增加,当跳偶数跳的时候就减少。药水是可以跳过不喝的。
先开始想的是把最大值最小值用一个二维数组表示,结果怎么想都想不出来,主要还是想到了要记步数,后来才去看解题报告,上面说什么开个二维数组,可以表示奇数步和偶数步。
选与不选这个问题,在代码里面说明吧~~~
先开始想的是把最大值最小值用一个二维数组表示,结果怎么想都想不出来,主要还是想到了要记步数,后来才去看解题报告,上面说什么开个二维数组,可以表示奇数步和偶数步。
选与不选这个问题,在代码里面说明吧~~~
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define MAXN 150000+10 int a[MAXN]; int dp[MAXN][2]; int max(int a,int b) { if(a>b) return a; else return b; } int main(void) { int P; while(scanf("%d",&P)==1) { memset(a,0,sizeof(a)); memset(dp,0,sizeof(dp)); int i; for(i=1;i<=P;i++) scanf("%d",&a[i]); dp[2][0]=max(0,a[1]-a[2]);//这里的处理挺巧的,我怎么就想不到…… dp[2][1]=max(a[1],a[2]); for(i=3;i<=P;i++) { dp[i][0]=max(dp[i-1][0],dp[i-1][1]-a[i]);//前面就是不选的状态 dp[i][1]=max(dp[i-1][1],dp[i-1][0]+a[i]); } printf("%d\n",max(dp[P][0],dp[P][1])); } }
相关文章推荐
- poj 2181 Jumping Cows 【简单DP】
- POJ 2181 JUMPING COWS(DP)
- POJ 2181简单DP
- poj 2342 Anniversary party(简单树形dp+dfs)
- POJ 3254 Corn Fields(简单的状态压缩dp)
- 【poj 3056】The Bavarian Beer Party (区间DP+最大匹配不交叉的简单算法)
- POJ 3176 Cow Bowling (简单dp——数塔问题)
- POJ 2181-Jumping Cows
- POJ-2533(最长上升子序列(简单dp))
- poj 3176 Cow Bowling(最简单DP题)
- poj 1417(并查集+简单dp)
- POJ 3176 (简单dp)
- POJ 1163 最佳路径简单DP
- POJ - 2181 - Jumping Cows
- POJ 3181 Dollar Dayz 简单DP
- poj 3280 简单dp
- poj1088 滑雪(简单dp)
- 简单dp-poj-2231-Moo Volume
- poj1189 简单dp
- POJ 3249 拓扑排序+ 简单DP