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. 什么是动态规划 ------------------------------- ...
随机推荐
- 【Beta】第5.5次任务发布
PM #100 日常管理&dev版宣传&设计报告管理后台. 后端 #101 完成收藏功能 完成管理员权限表的生成和接入(按位压缩权限表) 验收条件:收藏功能能够正常使用.能够区分常规用 ...
- JS 加载html 在IE7 IE8下 可调试
实际背景 就是都是HTML 公共头部底部 然后中间部分加载不同的HTML文件 有点跟模板引擎一样 jQuery 有个load函数 加载html文件的路径 获取html内容 到中间部分 正常下是不能用 ...
- C++程序设计——知识点总结
C++程序设计课程的总结,方便以后快速查阅和复习 Week 2 从C走进C++ 函数指针 函数名是函数的入口地址,指向函数的指针称为"函数指针". 比如,qsort库函数: voi ...
- [NHibernate]存储过程的使用(二)
目录 写在前面 文档与系列文章 创建对象 更新对象 总结 写在前面 上篇文章介绍了如何使用MyGeneration代码生成器生成存储过程,以及nhibernate中通过存储过程删除数据的内容,这篇文章 ...
- [Nhibernate]sqlite数据库基本使用
目录 写在前面 操作步骤 总结 写在前面 昨天有朋友问我在nhibernate中如何使用sqlite数据库,当时实在忙的不可开交,下周要去山西出差,实在没空,按我的说法使用sqlite跟使用sqlse ...
- NOSDK--一键打包的实现(三)
1.3 编译及拷贝资源的脚本介绍 这一节介绍编译及拷贝资源的shell脚本,即: tools: //保存通用的功 ...
- linux磁盘分区模式
linux磁盘分区模式 模式一:MBR 1)主分区不超过四个 2)单个分区容量最大2TB 模式二:GPT 1)主分区个数"几乎"没有限制(原因:在GPT的分区表中最多可以支持128 ...
- PHP中如何在数组中随机抽取n个数据的值 - array_rand()?
PHP中如何在数组中随机抽取n个数据的值? 最佳答案 array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用.它接受 input 作为输入数组和一个可选的参数 num_req,指明 ...
- redis使用简介
1.redis 支持"生产者与消费者模式"."订阅模式" 2.实时数据, 用数据类型.时间戳.数据内容,以二进制形式存取 3.查询时间.查询间隔时间.查询更新时 ...
- 【Alpha版本】冲刺-Day5
队伍:606notconnected 会议时间:11月13日 会议总结 张斯巍(433) 今天安排:完成昨天没完成的,设置界面设计 完成度:85% 明天计划:学习UI设计 遇到的问题:无 感想:一定要 ...