HDU 1260 Tickets DP
http://acm.hdu.edu.cn/showproblem.php?pid=1260
用dp[i]表示处理到第i个的时候用时最短。
那么每一个新的i,有两个选择,第一个就是自己不和前面的组队,第二就是和前面的组队。
那么dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i]); 前者是自己组队。
边界条件 dp[0] = 0; dp[1] = a[1];
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #define IOS ios::sync_with_stdio(false) using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL; #include <iostream> #include <sstream> #include <vector> #include <set> #include <map> #include <queue> #include <string> const int maxn = 2000 + 20; int a[maxn]; int b[maxn]; int dp[maxn]; void work() { int n; scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } for (int i = 2; i <= n; ++i) { scanf("%d", &b[i]); } dp[0] = 0; dp[1] = a[1]; for (int i = 2; i <= n; ++i) { dp[i] = min(dp[i - 1] + a[i], dp[i - 2] + b[i]); } // cout << dp[n] << endl; int addHour = dp[n] / 60 / 60; int addMin = (dp[n] / 60) % 60; int addSec = dp[n] % 60; printf("%02d:%02d:%02d ", 8 + addHour, addMin, addSec); if (8 + addHour > 12) { printf("pm\n"); } else if (8 + addHour == 12) { if (addMin || addSec) { printf("am\n"); } else printf("pm\n"); } else printf("am\n"); return; } int main() { #ifdef local freopen("data.txt","r",stdin); #endif int t; scanf("%d", &t); while (t--) work(); return 0; }
既然选择了远方,就要风雨兼程~
posted on 2016-10-27 14:50 stupid_one 阅读(134) 评论(0) 收藏 举报
浙公网安备 33010602011771号