博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP-hdu1260
阅读量:4346 次
发布时间:2019-06-07

本文共 1260 字,大约阅读时间需要 4 分钟。

题目链接:

题目描述:

题目大意:每一个人去电影票买票,有两种买票方法:1、自己单人买;2、与前面的人一起买;Joe是售票员,他想要早点下班,因此需要你编程序计算他能下班的最早时间。

 解题思路:首先用一个数组a来存放每个人自己一个人买票所需时间,再用一个数组dou来存从第二个人开始,每个人与前面一个人合并买票所需时间,因为第一个人的前面不可能有人了(除了售票员Joe,哈哈),所以第一个人的买票时间是确定了的为a[1]。采用动态规划来解决此问题,动态转移方程式为

dp[i]=min(dp[i-1]+a[i],dp[i-2]+dou[i]);

即:第i个人买票所花的最少时间等于min(  前面i-1个人 买票所花时间  加上 第i个人(自己) 买票所花时间, 前面的i-2个人 买票所花时间 加上 第i个人与第i-1个人(自己与前面那人)合并买票所花时间);

代码实现:

#include
#include
#include
using namespace std;int dp[2000];int main(){ int n,a[2000],k,dou[2000];//a数组存放单人买票所花时间,dou数组存放与前面那人一起买票所花时间 scanf("%d",&n); while(n--) { memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); memset(dou,0,sizeof(dou)); scanf("%d",&k); for(int i=1;i<=k;i++) scanf("%d",&a[i]); for(int i=2;i<=k;i++) scanf("%d",&dou[i]); dp[1]=a[1];//第一个人买票时间是固定了的,因为他的前方不再可能有人与他一起买票了 for(int i=2;i<=k;i++)//从第二个人开始遍历,找出最终的买票时间 dp[i]=min(dp[i-1]+a[i],dp[i-2]+dou[i]); int h=dp[k]/3600;///记录最终的时间 int m=dp[k]%3600/60; int s=dp[k]%60; printf("%02d:%02d:%02d%s\n",(8+h)%24,m,s,(h+8)%24>12?" pm":" am");//输出时间hh:mm:ss的简单操作 } return 0;}

 

转载于:https://www.cnblogs.com/LJHAHA/p/9981511.html

你可能感兴趣的文章
firewall 允许app访问网络
查看>>
window.addEventListener介绍说明
查看>>
JSON字符串转JavaBean,net.sf.ezmorph.bean.MorphDynaBean cannot be cast to ……
查看>>
Java小知识----POI事件模式读取Excel 2007
查看>>
Linux常见英文报错中文翻译
查看>>
17. Letter Combinations of a Phone Number
查看>>
高铁运营数据积累
查看>>
collections模块方法详解
查看>>
使用session防止重复提交
查看>>
10 款新鲜出炉的jQuery UI插件
查看>>
A. 【UR #16】破坏发射台
查看>>
遇到过的小问题
查看>>
梳理知识点(一)
查看>>
ftk学习记(输入框篇)
查看>>
nginx菜鸟模块开发遇到的问题汇总之nginx_array_t
查看>>
ssh登录问题
查看>>
Azure Table storage 之改进DynamicTableEntity类为其添加动态语言扩展
查看>>
在每页(分页)报表中重复显示标题 - SQL Server Reporting Service (SSRS)
查看>>
Spring的前期配置
查看>>
计算机体系结构层次-一张图诠释
查看>>