hdu 1257 dp2
来源:互联网 发布:网络记事本哪个好用 编辑:程序博客网 时间:2024/06/05 06:22
2014/9/23
老早做过的题目(贪心,暴力dp= =),不过下面的dp代码太神了233
(原抄某博客)
开始看了5分钟不能理解= =。
后来领悟了点,但还是说不出来,就留给大牛去解释吧。。
这代码留给自己看看(不算抄袭吧= =)
#include<stdio.h>#include<string.h>#include<cmath> #include<algorithm>#include<iostream>#include<queue>#include<stack>#include<map>#include<climits>#include<vector>using namespace std;typedef long long ll; #define f(x,y,i) for(int i = x;i < y; ++i)#define ff(x,y,i) for(int i = x;i <= y; ++i)#define F(x,y,i) for(int i = x; i >= y; --i)#define FF(x,y,i) for(int i = x; i > y; ++i)#define lson pos<<1,l,mid#define rson pos<<1|1,mid+1,r#define sc(n) scanf("%d",&n)#define pr(n) printf("%d\n",n)#define met(n,m) memset(n, m, sizeof(n)) #define mod 10007int Max(int a,int b){ return a>b?a:b;}int Min(int a,int b){ return a<b?a:b;}const int N=1050;int s[N];int ans[N],maxn = 0;int dp[N];int n, m;int main(){ while(~scanf("%d",&n)) { maxn = 0; f(0,n,i) scanf("%d",&s[i]),dp[i]= 1; f(0 ,n, i) { for(int j = i -1;j >= 0; --j) { if(s[i] > s[j] &&dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; } } } f(0, n, i) { if(maxn < dp[i])maxn = dp[i]; } printf("%d\n",maxn); } return 0;}
遍历过去,遇到的每颗导弹都判断前面有没有高度比当前导弹低的,有的话(第 j 颗 比 第 i 颗 低,i > j),在这颗导弹上用的就是第 dp[ j] + 1套系统,因为在前面比它低的导弹
有很多,所以你要在去前面遍历一遍,取 max (dp[i ] =Max(dp[j] +1)( 0=< J < i && 高度 j < 高度 i) 0 0
- hdu 1257 dp2
- hdu 3853(LOOPS)->概率dp2
- dp2
- Brackets-学习DP2
- dp2接上一篇
- 入门级dp2
- dp2之多重背包
- POJ 2955 Brackets (区间DP2)
- poj 2955(Brackets)【 区间dp2】
- 动态规划10_数位DP2
- 琦神教我学DP2---POJ-1185 炮兵布阵 状压DP
- hdu 1257
- hdu 1257
- hdu 1257
- hdu-1257
- HDU 1257
- hdu 1257
- hdu 1257
- hdu1026 Ignatius and the Princess I(广搜+记录路径)
- 环境: Ubuntu12.04 安装 GDAL
- JAVA中如何实用break,continue,跳出多重循环
- liblas学习笔记二——构建格网索引
- ios的真机调试
- hdu 1257 dp2
- C++结合LUA实现代码热更新
- C#开源
- 黑马程序员——网络编程及正则表达式
- nyoj118修路方案(次小生成树)
- C++ primer 第五版 中文版 练习 11.32 个人code
- 限速之TC
- java try catch finally
- linux cp 命令