poj 2385
2棵苹果树在T分钟内随机由某一棵苹果树掉下一个苹果,奶牛站在树#1下等着吃苹果,它最多愿意移动W次,问它最多能吃到几个苹果。
a[i][j] 表示在第j棵树下,前i秒的苹果和
dp[i][j]表示第i秒活动j次可吃到的苹果数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int t,aa,w,dp[1005][31],a[1005][2];
int main()
{
scanf("%d%d",&t,&w);
for(int i = 1; i <= t; ++i)
{
scanf("%d",&aa);
if(aa == 1) a[i][0] = 1;
else a[i][1] = 1;
}
for(int i = 1; i <= t; ++i)
for(int j = 0; j <= w; ++j)
if(j % 2)
{
dp[i][j] = dp[i - 1][j] + a[i][1];
if(j >= 1) dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + a[i][0]);
}
else
{
dp[i][j] = dp[i - 1][j] + a[i][0];
if(j >= 1) dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + a[i][1]);
}
printf("%d",dp[t][w]);
return 0;
}
本文解决了一个经典的动态规划问题——POJ2385苹果树问题。问题描述为:在T分钟内,两棵苹果树随机掉落苹果,奶牛站在第一棵树下,愿意移动W次来吃更多的苹果。文章通过动态规划算法求解奶牛最多能吃到多少个苹果。

313

被折叠的 条评论
为什么被折叠?



