zoukankan      html  css  js  c++  java
  • POJ 3661 (线性DP)

    题目链接http://poj.org/problem?id=3661

    题目大意:牛跑步。有N分钟,M疲劳值。每分钟跑的距离不同。每分钟可以选择跑步或是休息。一旦休息了必须休息到疲劳值为0。0疲劳值也可以花费1分钟去休息。最后疲劳值必须为0,问跑的最大距离。

    解题思路

    怎么看都像个随便YY的DP。

    用dp[i][j]表示第i分钟,疲劳值为j的最大距离。

    首先考虑第i分钟休息问题:

    ①上次已经疲劳为0,这次又休息。dp[i][0]=dp[i-1][0].

    ②上次疲劳为k。dp[i][0]=max(dp[i][0],dp[i-k][k]),其中i-k>0

    然后考虑第i分钟跑步问题

    dp[i][j]=dp[i-1][j-1]+d[i]。

    这样所有状态就推完了。

    最后ans=dp[n][0]。

    #include "cstdio"
    #include "iostream"
    using namespace std;
    #define maxn 10005
    int d[maxn],dp[maxn][505];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&d[i]);
        for(int i=1;i<=n;i++)
        {
            dp[i][0]=dp[i-1][0];
            for(int j=1;j<=m&&i-j>0;j++) dp[i][0]=max(dp[i][0],dp[i-j][j]);
            for(int j=1;j<=m;j++)
                dp[i][j]=dp[i-1][j-1]+d[i];
        }
        printf("%d
    ",dp[n][0]);
    
    }
    13565515 neopenx 3661 Accepted 19956K 157MS C++ 498B 2014-10-25 17:26:32
  • 相关阅读:
    接口
    多态
    static的用法
    Person类中多个构造方法和测试
    曹操外卖实现功能
    曹操外卖数据表设计
    java中 try catch finally和return联合使用时,代码执行顺序的小细节
    GenerationType四中类型
    spring boot
    VMware修改为静态ip
  • 原文地址:https://www.cnblogs.com/neopenx/p/4050413.html
Copyright © 2011-2022 走看看