• 背包——[Usaco2007 Jan]Running POJ3661


    疲劳奔跑,求最长跑了多少

    一开始没有看到题目的特殊性,一旦休息,就一直休息直到疲劳度为0

    dp[i][j] i表示到第i个跑点,j表示当时的疲劳度时最大,WA

    其实考虑了特殊性就是0,1背包了

    add[i]表示1-i的和

    dp[i]=max(dp[i],dp[i-j*2]+add[i-j]-add[i-2*j]);

    View Code
    #include<stdio.h>

    int dp[10009];
    int add[10009];

    int max(int a,int b)
    {
    if(a>b)return a;
    else return b;
    }

    int main()
    {
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    int i,j,temp;
    add[0]=0;
    dp[0]=0;

    for(i=1;i<=n;i++)
    {
    scanf("%d",&temp);
    add[i]=add[i-1]+temp;
    dp[i]=0;
    }

    for(i=1;i<=n;i++)
    {
    dp[i]=dp[i-1];
    for(j=1;j<=m;j++)
    {
    if((i-2*j)>=0)
    dp[i]=max(dp[i],dp[i-2*j]+add[i-j]-add[i-2*j]);
    else
    break;
    }
    }

    printf("%d\n",dp[n]);
    }
    }



  • 相关阅读:
    Pyramid of Glasses 酒杯金字塔 [CF-676B]
    BZOJ 2456mode
    Hamburgers [CF-371C]
    lowbit
    two point
    大O表示法的理解
    6. 第 6 章 队列
    5. 第 5 章 栈
    3. 第 3 章 向量
    10. 第 10 章 指针
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2317740.html
Copyright © 2020-2023  润新知