hdu分类 Dynamic Programming(这是一场漫长的旅途)
下面是difficulty 1的题
1003 Max Sum
最长递增子序列。非常经典,最棒的解法是在线算法O(n)的复杂度。
贴的呢,是用dp做的代码。
先是一个高亮的dp递推式,然后找到最大处,用k记录。即所求的子序列的结尾,之后倒推,用减法推出子序列的开头位置。
要注意的点就是各个变量的初始化,初始化不好,很容易WA。还有找子序列的头的时候,倒推的时候找到等值的数是不跳出的,但是更新gx的值,因为0的存在。
#include <iostream> #include <cstring> using namespace std; ]; ]; int main() { int t; cin>>t; ; while(t--) { int n; cin>>n; ;i<=n;i++) { cin>>a[i]; } memset(dp,,sizeof(dp)); ;i<=n;i++) { ]<) dp[i]=a[i]; else dp[i]=dp[i-]+a[i]; } ],k=; ;i<=n;i++) { if(dp[i]>ans) { ans=dp[i]; k=i; } } int max=ans; int gx=k,sx=k; ;i--) { max-=a[i]; ) sx=i; } cout<<"Case "<<p++<<":"<<endl; cout<<ans<<" "<<sx<<" "<<gx<<endl; ) cout<<endl; } ; }
1025 Constructing Roads In JGShining's Kingdom
这道题也是非常非常经典的,重点是怎么去想到这是一个LIS。
你把一条轴上的看成数组的下标,一条轴上的看成数组的值,一一对应起来,发现它所要求的就是该数组中的LIS。
这里写的是nlogn的LIS的方法。具体的可以看看书或者网上的博客,LIS本来朴素的做法是n²的,但是当你换一个方式dp,dp[n]表示的是长度为n+1的子序列的结尾的最大值。就可以降到nlogn。
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; +; const int INF = 0x3f3f3f3f; int road[maxn],dp[maxn]; int main() { int n,x,y; ; while(~scanf("%d",&n)) { ;i<n;i++) dp[i] = INF; ;i<n;i++) { scanf("%d%d",&x,&y); road[x] = y; } ;i<=n;i++) { *lower_bound(dp,dp+n,road[i]) = road[i]; } int len = lower_bound(dp,dp+n,INF) - dp; printf("Case %d:\n",p++); printf("My king, at most %d road",len); ) printf("s"); printf(" can be built.\n\n"); } ; }
1058 Humble Numbers
这道题比较恶心的是输出,英文的序数词的格式orz。
这段dp也比较奇特,对当时的我来说。
,p2=,p3=,p5=,p7=; rec[i++] = ; ) { *rec[p2],*rec[p3]); *rec[p5],*rec[p7]); rec[i] = min( one , two ); *rec[p2]) p2++; *rec[p3]) p3++; *rec[p5]) p5++; *rec[p7]) p7++; i++; }
#include <cstdio> #include <algorithm> using namespace std; ]; int main() { ,p2=,p3=,p5=,p7=; rec[i++] = ; ) { *rec[p2],*rec[p3]); *rec[p5],*rec[p7]); rec[i] = min( one , two ); *rec[p2]) p2++; *rec[p3]) p3++; *rec[p5]) p5++; *rec[p7]) p7++; i++; } int n; while(~scanf("%d",&n) && n) { == && n% != ) printf("The %dst humble number is %d.\n",n,rec[n]); == && n% != ) printf("The %dnd humble number is %d.\n",n,rec[n]); == && n% != ) printf("The %drd humble number is %d.\n",n,rec[n]); else printf("The %dth humble number is %d.\n",n,rec[n]); } ; }
1059 Dividing
hdu分类 Dynamic Programming(这是一场漫长的旅途)的更多相关文章
- HDU 4223 Dynamic Programming?(最小连续子序列和的绝对值O(NlogN))
传送门 Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solvi ...
- hdu 4223 Dynamic Programming?
Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- hdu 4223 Dynamic Programming? (dp)
//连续的和的绝对值最小 # include <stdio.h> # include <string.h> # include <algorithm> # incl ...
- hdu 4972 A simple dynamic programming problem(高效)
pid=4972" target="_blank" style="">题目链接:hdu 4972 A simple dynamic progra ...
- HDU-4972 A simple dynamic programming problem
http://acm.hdu.edu.cn/showproblem.php?pid=4972 ++和+1还是有区别的,不可大意. A simple dynamic programming proble ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- Dynamic Programming
We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...
- 算法导论学习-Dynamic Programming
转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...
随机推荐
- Size Balance Tree(SBT模板整理)
/* * tree[x].left 表示以 x 为节点的左儿子 * tree[x].right 表示以 x 为节点的右儿子 * tree[x].size 表示以 x 为根的节点的个数(大小) */ s ...
- SDL绑定播放窗口 及 视频窗口缩放
绑定播放窗口 必须在Sdl.SDL_Init之前执行 Sdl.SDL_putenv 同时SDL_SetVideoMode里播放窗口长宽不能大于绑定窗口的长宽 int i = Sdl.SDL_puten ...
- [Unity3D]引擎学习之注意事项(持续更新中)
调试相关 如果是想在触发粒子系统效果的时候播放声音(比如爆炸的特殊发生时也播放声音),则需要将爆炸效果的粒子系统保持为Prefab后,添加Audio Source组件,在组件中添加声音文件并且确保pl ...
- python 面向对象(类)
面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...
- 浅谈 PHP 与手机 APP 开发(API 接口开发) -- 转载
转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:不可以,因 ...
- CSS大杂烩(1)
box-sizing 有4种方式 border-box 用来减去padding内边框和边框 前提是设置好固定宽高 content-box 在宽和高之外内边距和边框 其实基本上和原来一样 inherit ...
- [Linux] 账户管理命令(一)
用户和用户组 Linux用户组的所有信息都存放在/etc/group文件中.具有某种共同特征的用户集合起来就是用户组(Group).用户组(Group)配置文件主要有 /etc/group和/etc/ ...
- java基础 集合类
java集合类主要有以下集中: List结构的集合类: ArrayList类, LinkedList类, Vector类, Stack类 Map结构的集合类: HashMap类,Hashtable类 ...
- php-css外边距
css 基本语法 selector{declaration1;declaration2;....delecrationN;} (选择器和一条或多条声明) 选择器为需要改变样式的html元素,每条声 ...
- UVA2322
题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...