标签:int ref orm namespace vector ota ase margin 状态转移方程
If so, I guess Joe would full
of appreciation for your help.
2 2 20 25 40 1 8
08:00:40 am 08:00:08 am
解题思路:
一个人能够单独买票花费一定的时间,也能够两个人一起买票,也给定一个时间。给出K个人的单独买票时间和K-1个相邻的两个人一起买票的时间。问一共花费的最小时间。
用one[i]为每一个人单独买票的时间,two[ i+1]为两个人一起买票的时间。
状态转移方程为: dp[i] = min(dp[i-1]+one[i] , dp[i-2] + two[i] )。当前第i个人分为两种情况。一是单独买,而是和前面的一块买。
另外注意最后的输出。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<stdlib.h> #include<vector> #include<queue> #include<cmath> using namespace std; const int maxn = 2000 + 50; int n; int k; int dp[maxn]; int one[maxn]; int two[maxn]; int main() { scanf("%d", &n); while( n-- ) { memset(dp, 0, sizeof(dp)); memset(one, 0, sizeof(one)); memset(two, 0, sizeof(two)); scanf("%d", &k); for(int i=1; i<=k; i++)scanf("%d", &one[i]); for(int i=2; i<=k; i++)scanf("%d", &two[i]); dp[0] = 0;dp[1] = one[1]; for(int i=2; i<=k; i++)dp[i] = min( dp[i-1]+one[i], dp[i-2]+two[i] ); int h = dp[k] / 3600 + 8; int m = dp[k] / 60 % 60; int s = dp[k] % 60; printf("%02d:%02d:%02d am\n", h, m, s); } return 0; }
标签:int ref orm namespace vector ota ase margin 状态转移方程
原文地址:http://www.cnblogs.com/brucemengbm/p/6882892.html