您的位置:首页 > 编程语言 > C语言/C++

Hdu 1260 【DP】.cpp

2013-06-05 14:39 295 查看
  题意:

  知道一个人买票花的时间和和前面那个人一起买票花的时间,问最少花多少时间可以把票卖完..

  输入:

    给出T,表示有T组样例

    给出n,表示有n个人买票..

    给出n个数表示这个人单独买票会花的时间..

    给出n-1个数,表示这个人和前面那个人一起买票会花的时间..

    

思路:

  状态转移方程是:dp[i] = min(dp[i-1]+单独买花的时间, dp[i-2]+和前面那个人一起买花的时间)

  初始状态是dp[1] = 第一个人单独买话的时间

  

Tips:

  nothing..??!

Code:

#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;

const int MAXN = 2010;

int main()
{
int T, n;
int d[MAXN], s[MAXN], dp[MAXN] = {0};
int hh, mm, ss;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &s[i]);
for (int i = 2; i <= n; ++i)
scanf("%d", &d[i]);
dp[1] = s[1];
for (int i = 2; i <= n; ++i)
dp[i] = min(dp[i-1]+s[i], dp[i-2]+d[i]);
hh = dp
/3600;
mm = dp
%3600/60;
ss = dp
%60;
printf("%02d:%02d:%02d%s\n", (8+hh)%24, mm, ss, (hh+8)%24>12?" pm":" am");
}
return 0;
}


View Code

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: