题目:Codeforces 208 div2 D. Dima and Hares
tag :dp
思路:dp[i][0] 表示i先于i+1 前 i 项的最大值
dp[i][1] 表示i后于i+1 前 i 项的最大值
注意:求最大值的时候要注意最后一项,如果单纯求max(dp[n][1],dp[n][0])就错了,因为dp[n][1]没有第n+1项
同时,当n=1的时候,答案唯一 a[1]
import java.math.BigInteger;
import java.util.*;
import static java.util.Arrays.sort;
public class Main{
public static int max(int a,int b){
return a>b?a:b;
}
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
int n;
int maxn=3010;
int a[]=new int[maxn];
int b[]=new int[maxn];
int c[]=new int[maxn];
int[][] dp=new int[maxn][2];
while(cin.hasNext()){
n=cin.nextInt();
for(int i=1;i<=n;i++)
a[i]=cin.nextInt();
for(int i=1;i<=n;i++)
b[i]=cin.nextInt();
for(int i=1;i<=n;i++)
c[i]=cin.nextInt();
if(n==1){
System.out.println(a[1]);
continue;
}
Arrays.fill(dp[1],0);
Arrays.fill(dp[0],0);
dp[1][0]=a[1];
dp[1][1]=b[1];
for(int i=2;i<n;i++){
dp[i][0]=max(dp[i-1][0]+b[i],dp[i-1][1]+a[i]);
dp[i][1]=max(dp[i-1][0]+c[i],dp[i-1][1]+b[i]);
}
int ans=max(dp[n-1][0]+b[n],dp[n-1][1]+a[n]);
System.out.println(ans);
}
}
}