HDU 1260(Tickets)

基础动态规划题,状态转移方程为 dp[i] = min(dp[i-1] + singleT[i], dp[i-2] + doubleT[i-1]),其中 dp[i] 表示给 i 个人售票的最短时间,singleT[i] 表示给第 i 个人单独售票的时间,doubleT[i] 表示给第 i 和 i+1 个人同时售票的时间。(注意中午 12 点用 am)

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXK = 2005;

int singleT[MAXK], doubleT[MAXK]; //单人售票时间,双人售票时间
int dp[MAXK]; //总计最短售票时间

int main()
{
	int N;
	cin >> N;
	int K;
	while (N--)
	{
		cin >> K;
		for (int i = 1; i <= K; i++)
		{
			cin >> singleT[i];
		}
		for (int i = 1; i <= K - 1; i++)
		{
			cin >> doubleT[i];
		}

		memset(dp, 0, sizeof(dp));
		dp[1] = singleT[1];
		for (int i = 2; i <= K; i++) //动态规划
		{
			dp[i] = min(dp[i - 1] + singleT[i], dp[i - 2] + doubleT[i - 1]);
		}

		int time = dp[K]; //最短售票总时间(秒)
		int h, m, s; //时,分,秒
		h = time / 3600 + 8;
		time %= 3600;
		m = time / 60;
		time %= 60;
		s = time;
		if (h <= 12)
			printf("%02d:%02d:%02d am\n", h, m, s);
		else
			printf("%02d:%02d:%02d pm\n", h - 12, m, s);
	}
	return 0;
}

继续加油。

发布了206 篇原创文章 · 获赞 1 · 访问量 9003

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/104781726