cf D. Dima and Hares
http://codeforces.com/contest/358/problem/D
题意:ai代表相邻的两个野兔都没有吃食物情况下的快乐系数,bi代表的是在相邻的两个野兔中有一个吃到食物的快乐系数,ci代表的是相邻的两个野兔都迟到事物的快乐系数,给你n个野兔的快乐系数,求最大快乐系数。
dp[i][0]表示先于i+1个吃到食物的最大快乐系数,dp[i][1]表示后于i+1个吃到食物的最大快乐系数。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 10000 5 using namespace std; 6 7 int n; 8 int a[maxn],b[maxn],c[maxn]; 9 int dp[maxn][2]; 10 11 int main() 12 { 13 while(scanf("%d",&n)!=EOF) 14 { 15 for(int i=1; i<=n; i++) 16 scanf("%d",&a[i]); 17 for(int i=1; i<=n; i++) 18 scanf("%d",&b[i]); 19 for(int i=1; i<=n; i++) 20 scanf("%d",&c[i]); 21 dp[n][0]=a[n]; 22 dp[n][1]=b[n]; 23 for(int j=n-1; j>=1; j--) 24 { 25 dp[j][0]=max(dp[j+1][0]+b[j],dp[j+1][1]+a[j]); 26 dp[j][1]=max(dp[j+1][1]+b[j],dp[j+1][0]+c[j]); 27 } 28 printf("%d\n",dp[1][0]); 29 } 30 return 0; 31 }