zoj 3741 Eternal Reality DP
来源:互联网 发布:js输入框输入触发事件 编辑:程序博客网 时间:2024/04/30 15:31
参考链接:http://blog.csdn.net/night_raven/article/details/18523473
思路:
学园都市内有等级从0-5的能力者,先给定你的等级(0--5),给出n个你的对手Ai(0--6),只有你的等级大于等于Ai你才能胜利并且拿到一分,另外你还可以开挂,在第i回合使用外挂,[I,I+X-1]回合里你等等级+1(如果你是LV5,开挂后还是LV5),并且[i+x,i+x+y-1]回合中你的等级为0.问你最多能拿多少分。这题有两个坑,一个是LV5开挂后还是LV5(这个看过魔禁或者超炮的应该很容易注意到吧..)还有一个就是开挂后副作用期间,依然是可以干掉LV0的..其他就没什么了,dp[i][j]表示第i轮比赛,最近一次开挂是第j回合,然后分情况讨论下就可以了..
自己打不出来,看到讲解才明白,其实代码并不难理解,难的是状态转移方程,我果然还是一名菜鸟,连小鸟的境界都不到;
有个重点:
当i==j时,前面最多从i-x-y处开挂
因为 k+x+y-1处开挂结束,故i==k+x+y-1+1,解得k=i-x-y;
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>using namespace std;typedef long long ll;const int maxn=120;int n,m,p,q;int lv,x,y;int a[maxn];int dp[maxn][maxn];int main(){// freopen("in.txt","r",stdin); while(~scanf("%d%d%d%d",&lv,&n,&x,&y)) { memset(a,0,sizeof a); memset(dp,0,sizeof dp); for (int i=1; i<=n; i++) scanf("%d",&a[i]); for (int i=1; i<=n; i++) for (int j=0; j<=i; j++) { if (j==0) { dp[i][j]=dp[i-1][j]; if (lv>=a[i]) dp[i][j]++; } else if (j+x-1>=i && i!=j) { dp[i][j]=dp[i-1][j]; if (lv+1>=a[i] && a[i]<6) dp[i][j]++; } else if (j+x+y-1>=i && j+x<=i && i!=j) { dp[i][j]=dp[i-1][j]; if (a[i]==0) dp[i][j]++; } else if (i==j) { int st=max(0,j-x-y); for (int k=st; k>=0; k--) { dp[i][j]=max(dp[i-1][k],dp[i][j]); } if (lv+1>=a[i] && a[i]<6) dp[i][j]++; } else { dp[i][j]=dp[i-1][j]; if (lv>=a[i]) dp[i][j]++; } } int ans=0; for (int i=0; i<=n; i++) ans=max(ans,dp[n][i]); cout<<ans<<endl; } return 0;}
0 0
- zoj 3741 Eternal Reality(DP)
- zoj 3741 Eternal Reality DP
- ZOJ 3741 Eternal Reality [dp]
- zoj 3741 Eternal Reality DP
- zoj 3741 Eternal Reality dp
- ZOJ 3741 Eternal Reality 简单DP
- ZOJ 3741 Eternal Reality 简单dp
- ZOJ 3741 Eternal Reality
- ZOJ 3741 Eternal Reality
- Eternal Reality
- ZOJ 3741 魔禁 dp
- codeforces 61D Eternal Victory 树形DP
- Reality
- Eternal Flame
- zoj 1149 双向dp
- zoj 2402 简单dp
- zoj 2744 DP做法
- zoj 2704 dp
- JavaScript 文件拖拽上传插件 dropzone.js 学习总结。
- NUPT- DFS 算法题1047
- const, static, define 以及inline的区别
- [Android] How to use github with android studio
- Linux kernel 分析之八:系统调用参数
- zoj 3741 Eternal Reality DP
- 如何根据标签文字获取标签Size
- !HDU 4135 Co-prime-容斥原理-(位运算技巧)
- 使用httpFS访问hdfs
- Selenium学习笔记之005:第一个selenium+python+webdriver脚本
- Qt MVC学习 模型子类化参考(三)
- 几种排序的源代码
- 面向对象设计四大原则
- 股票学习(财务分析12)