1. 程式人生 > >假期訓練七(hdu-2845 dp,hdu-1846,2188 巴什博奕)

假期訓練七(hdu-2845 dp,hdu-1846,2188 巴什博奕)

題目一:傳送門

思路:動態規劃,從每一行來看,每次更新求出這一點的最大值,dp[i]=MAX(dp[i-1],dp[i]+dp[i-2]),不會出現

兩個數字相鄰的情況;先對行進行更新,再對列進行更新。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 2001;
int a[maxn],dp[maxn];
int MAX(int x,int y)
{
    return x>y?x:y;
}
int main(void) { int n,m,i,j; while(~scanf("%d%d",&n,&m)) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) scanf("%d",&a[j]); for(j=2;j<=m;j++) a[j]=MAX(a[j]+a[j-2],a[j-1]); dp[i]=a[m]; } for(i=2;i<=n;i++) dp[i]=MAX(dp[i]+dp[i-2
],dp[i-1]); printf("%d\n",dp[n]); } return 0; }
View Code

 

題目二、三:

思路:

巴什博奕

(1)兩個人取石子,總共有n個石子,每個人一次最多取m個。

(2)先取完石子的人獲勝。

判斷n%(m+1)==0,如果成立,後手勝利;否則先手勝利。

 

擴充套件:取光者輸,調整策略,變為(n-1)%(m+1)==0,後手勝利;否則,先手勝利。