Codeforces Round #208 (Div. 2)D. Dima and Hares
原題連接:http://codeforces.com/contest/358/problem/D
題目大意:有n個兔子排成一排,給第i個兔子喂食后,在其左右兩只兔子均未被喂食是獲得ai的愉悅值,有一個被喂食后獲得bi的愉悅值,兩只都被喂食過會獲得ci的愉悅值,求喂過所有的兔子后獲得的最大愉悅值。
解題思路:可以采用dp思想
dp[i][0]表示第i個兔子比第i-1個兔子后喂食,前i-1個兔子獲得的最大愉悅值
dp[i][1]表示第i個兔子比第i-1個兔子先喂食,前i-1個兔子獲得的最大愉悅值
cst[k][i]表示輸入矩陣的第k行,對應的收益值,具體背景參考題目描述。
轉移方程: 分別考慮i-1比i-2是先喂還是后喂
dp[i][0]= max(dp[i-1][0]+joy[1][i-1],dp[i-1][1]+joy[0][i-1]);
dp[i][1]= max(dp[i-1][0]+joy[2][i-1],dp[i-1][1]+joy[1][i-1]);
邊界條件:(邊界條件可以放入轉移方程中,參考代碼)
dp[1][0]=cst[0][0]; 1比0后喂,考慮0的收益。
dp[1][1]=cst[1][0];?1比0先喂,考慮0的收益。
思路來源:https://blog.csdn.net/kevinkitty_love/article/details/14002835
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<vector> 7 #include<queue> 8 #include<stack> 9 #include<map> 10 #include<set> 11 #include<cmath> 12 using namespace std; 13 #define ll long long 14 #define ull unsigned long long 15 #define ldb long double 16 #define db double 17 #define fi first 18 #define se second 19 #define INF 0x3f3f3f3f 20 #define endl "\n" 21 #define rush() int T;cin>>T;while(T--) 22 #define mem(a,b) memset((a),(b),sizeof(a)) 23 const db pi = acos((db)-1); 24 const ll MAXN = 3000; 25 const ll mod = 1e9+7; 26 27 int dp[MAXN+2][2]; 28 int joy[3][MAXN+2]; 29 30 int main() 31 { 32 int n; 33 scanf("%d",&n); 34 for(int j=0;j<3;j++) 35 { 36 for(int i=0;i<n;i++) 37 { 38 scanf("%d",&joy[j][i]); 39 } 40 } 41 42 dp[0][0]=-INF; 43 dp[0][1]=0; 44 45 for(int i=1;i<=n;i++) 46 { 47 dp[i][0]= max(dp[i-1][0]+joy[1][i-1],dp[i-1][1]+joy[0][i-1]); 48 dp[i][1]= max(dp[i-1][0]+joy[2][i-1],dp[i-1][1]+joy[1][i-1]); 49 } 50 51 printf("%d\n",dp[n][0]); 52 53 return 0; 54 }?
轉載于:https://www.cnblogs.com/Ogreee/p/10927713.html
總結
以上是生活随笔為你收集整理的Codeforces Round #208 (Div. 2)D. Dima and Hares的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Nginx: [error] ope
- 下一篇: 九、SpringBoot集成Thymel