题目链接
刚开始有点没看懂题意,后来参考了这位大佬的博客https://blog.csdn.net/chenzhenyu123456/article/details/47727037
看到转移方程的瞬间,秒懂题目意思,还是题目做少了,动态规划方面还是不太行。。
注意这是12进制的时间
ac代码:
import java.util.Arrays;
import java.util.Scanner;
/*
* 一维简单dp,刚开始没看懂。。,
* 转移方程是 dp[i]=min(dp[i-1]+one[i],dp[i-2]+two[i]);
*/
public class Main {
static int maxn=2010;
static int dp[]=new int[maxn];
static int one[]=new int[maxn];
static int two[]=new int[maxn];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n-->0){
int k=sc.nextInt();
for(int i=1;i<=k;i++){
one[i]=sc.nextInt();
}
for(int i=2;i<=k;i++){
two[i]=sc.nextInt();
}
Arrays.fill(dp, 0);
dp[1]=one[1];
for(int i=2;i<=k;i++)
dp[i]=Math.min(dp[i-1]+one[i], dp[i-2]+two[i]);
int time=28800+dp[k];
int hour=time/3600;
int minute=(time%3600)/60;
int s=(time%3600)%60;
if(time >= 43200)
{
if(hour > 12)
hour -= 12;
System.out.printf("%02d:%02d:%02d pm", hour, minute, s);
}
else
System.out.printf("%02d:%02d:%02d am", hour, minute, s);
System.out.println();
}
sc.close();
}
}