需要注意的点:
1.时间表示,模和除法搭配使用
2.printf格式化输出,%02d表示自动补0的两位数
3.审题,一开始用贪心,后来发现相邻两个人是不能拆开的
4.这种两个序列的一般都是寻找最小子单元来对应
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
private static int[] dp ;
private static int[] single ;
private static int[] couple ;
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))) ;
in.nextToken() ;
int T = (int)in.nval ;
while(T-->0){
in.nextToken() ;
int K = (int)in.nval ;
single = new int[K+2] ;
couple = new int[K+2] ;
for(int i=1;i<=K;i++){
in.nextToken() ;
single[i] = (int)in.nval ;
}
for(int i=2;i<=K;i++){
in.nextToken() ;
couple[i] = (int)in.nval ;
}
dp = new int[K+2] ;
dp[1] = single[1] ;
for(int i=2;i<=K;i++){
dp[i] = Math.min(dp[i-1]+single[i],dp[i-2]+couple[i]) ;
}
int h = dp[K]/3600 + 8 ;
int m = dp[K]%3600/60 ;
int s = dp[K]%3600%60 ;
if(h<12){
System.out.printf("%02d:%02d:%02d am",h,m,s) ;
System.out.println() ;
}else{
System.out.printf("%02d:%02d:%02d pm",h,m,s) ;
System.out.println() ;
}
}
}
}