这道题刚开始从前往后推,没有推出状态转移方程,用从后往前才算推出来了
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int dp[2020][3];
int v1[2020];
int v2[2020];
int main()
{
int N;
cin>>N;
while(N--){
int K;
cin>>K;
memset(dp,0,sizeof(dp));
//memset(v1,0,sizeof(v1));
//memset(v2,0,sizeof(v2));
for(int i=0;i<K;i++){
//cin>>v1[i];
scanf("%d",&v1[i]);
}
for(int i=0;i<K-1;i++){
scanf("%d",&v2[i]);
}
dp[K-1][1]=v1[K-1];
for(int i=K-1;i>0;i--){
if(i==K-1) dp[i-1][1]=dp[i][1]+v1[i-1];
else dp[i-1][1]=min(dp[i][1]+v1[i-1],dp[i][2]+v1[i-1]);
dp[i-1][2]=dp[i][1]-v1[i]+v2[i-1];
}
int t=0;
if(K!=1)
t=min(dp[0][1],dp[0][2]);
else
t=dp[0][1];
int h=t/3600;
int m=(t%3600)/60;
int s=t%60;
printf("%02d:%02d:%02d %s\n",(8+h)%24,m,s,((8+h)%24>12?"pm":"am"));
}
return 0;
}