加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

POJ PKU 3661 动态规划

(2010-04-22 19:58:31)
标签:

poj

pku

3661

it

分类: 动态规划

题目描述:

一个人(牛。。。)跑步,开始时劳累程度是0,一共有N分钟,如果第i分钟跑步的话,能跑di的距离。同时劳累程度加1,如果这一分钟休息的话,劳累程度减一,而且如果一旦休息,就一定要休息到劳累程度为0时才能继续跑。

问第N分钟劳累程度是0的时候最多能跑多远。

解题报告:

dp

dp[i][j] = dp[i - 1][j - 1] di ( j  > 0 )
dp[i][0] = max (dp[i - 1][0], dp[i - j][j](i - j >= j && j <= M))

代码如下:

#include<iostream>
using namespace std;
int dp[10001][501], n, m, x;
int main()
{
    scanf("%d%d", &n, &m);
    memset(dp, 0, sizeof(dp));
    for(int i = 1; i <= n; i )
    {
        scanf("%d", &x);
        dp[i][0] = dp[i - 1][0];
        for(int j = 1; j <= m; j )
        {
            dp[i][j] = dp[i - 1][j - 1] x;
            if (i - j >= j && dp[i - j][j] > dp[i][0])
                dp[i][0] = dp[i - j][j];
        }
    }
    printf("%d\n", dp[n][0]);
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有