刷題——Apple Catching POJ - 2385
/*
dp[i][j]爲i時間,j次變換下所能得到的最大果實數
位置從1號樹開始,所以j爲偶數時在樹1處
若在i時刻,果實在所在樹上掉落
則dp[i][j]=dp[i-1][j]在上一時刻同一變換下所得的最大最大果實數+1
若不是,則dp[i][j]=max(dp[i][j-1],dp[i-1][j])所能得到的最大果實
應爲上一時刻同一變換所得的最大果實數,或改前一次變換所得的最大果實數
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[1005][35];
int tree[1005];
int main(){
int t,w;
while(~scanf("%d %d",&t,&w)){
for(int i=1;i<=t;i++){
scanf("%d",&tree[i]);
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=t;i++){
for(int j=0;j<=w;j++){
if((tree[i]&1)!=(j&1)){
dp[i][j]=dp[i-1][j]+1;
}
else{
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
int maxx=0;
for(int i=1;i<=w;i++){
maxx=max(maxx,dp[t][i]);
}
printf("%d\n",maxx);
}
return 0;
}
dp[i][j]爲i時間,j次變換下所能得到的最大果實數
位置從1號樹開始,所以j爲偶數時在樹1處
若在i時刻,果實在所在樹上掉落
則dp[i][j]=dp[i-1][j]在上一時刻同一變換下所得的最大最大果實數+1
若不是,則dp[i][j]=max(dp[i][j-1],dp[i-1][j])所能得到的最大果實
應爲上一時刻同一變換所得的最大果實數,或改前一次變換所得的最大果實數
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[1005][35];
int tree[1005];
int main(){
int t,w;
while(~scanf("%d %d",&t,&w)){
for(int i=1;i<=t;i++){
scanf("%d",&tree[i]);
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=t;i++){
for(int j=0;j<=w;j++){
if((tree[i]&1)!=(j&1)){
dp[i][j]=dp[i-1][j]+1;
}
else{
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
int maxx=0;
for(int i=1;i<=w;i++){
maxx=max(maxx,dp[t][i]);
}
printf("%d\n",maxx);
}
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.