【dp】HDU - 1260 Tickets
2017-08-12 19:57
381 查看
Problem Description
一个人八点开始上班,卖票,可以一次卖一张,也可以一次卖相邻的两张,问你最快什么时候可以下班。给你T组测试数据,每组测试数据给你一个n,代表有n个人排队买票,给你n个数,代表每个人买票需要的时间,给你n-1个数,代表相邻两个人一起买票需要的时间。
思路:比较简单,想一想状态转移方程就出来了: dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i - 1]);dp[i]代表卖到第i个人需要花费的最少时间。
一个人八点开始上班,卖票,可以一次卖一张,也可以一次卖相邻的两张,问你最快什么时候可以下班。给你T组测试数据,每组测试数据给你一个n,代表有n个人排队买票,给你n个数,代表每个人买票需要的时间,给你n-1个数,代表相邻两个人一起买票需要的时间。
思路:比较简单,想一想状态转移方程就出来了: dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i - 1]);dp[i]代表卖到第i个人需要花费的最少时间。
#include<bits/stdc++.h> using namespace std; int dp[2005], a[2005], b[2005]; int main() { int T, i, n; scanf("%d", &T); while(T--) { scanf("%d", &n); for(i = 1; i <= n; i++) { scanf("%d", &a[i]); } for(i = 1; i < n; i++) { scanf("%d", &b[i]); } memset(dp, 0, sizeof(dp));//初始化 dp[1] = a[1];//初始化 for(i = 2; i <= n; i++)//求dp { dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i - 1]); } int h = 8, m = 0, s = 0; h += dp / 3600;//过了几个小时 dp = dp % 3600; m += dp / 60;//还需要再过几分钟 dp = dp % 60; s += dp ;//还需要再过几秒 if(h > 12)//大于十二点就是下午 { h = h - 12; printf("%02d:%02d:%02d pm\n", h, m, s); } else printf("%02d:%02d:%02d am\n", h, m, s); } return 0; }
相关文章推荐
- hdu 1260 Tickets(DP)
- HDU 1260 Tickets 简单DP
- HDU 1260:Tickets(DP)
- DP-HDU-1260-Tickets
- HDU 1260 Tickets(DP)
- hdu 1260 Tickets(DP)
- HDU 1260 Tickets (很简单的基础DP题,找到状态转移方程就直接AC了)
- HDU - 1260 Tickets (dp)
- hdu 1260 Tickets(DP)
- hdu 1260 Tickets (dp)
- hdu 1260 Tickets(DP)
- HDU 1260 Tickets(简单DP)
- hdu 1260 Tickets(DP)
- HDU 1260 Tickets 简单dp
- hdu 1260 Tickets(DP)
- hdu 1260 Tickets(基础dp)
- HDU - 1260 Tickets (简单DP)
- [dp专题]hdu 1260 tickets
- HDU-1260 Tickets(DP)
- hdu 1260 Tickets(DP)