码迷,mamicode.com
首页 > 其他好文 > 详细

【Luogu】P1868饥饿的奶牛(DP)

时间:2017-10-12 19:20:42      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:show   blank   turn   位置   str   inline   etc   tps   return   

  题目链接

  话说我存一些只需要按照一个关键字排序的双元素结构体的时候老是喜欢使用链式前向星……

  DP。f[i]表示前i个位置奶牛最多能吃到的草。转移方程如下:  

f[i]=f[i-1];
f[i]=max(f[i],f[x[j]-1]+y[j]-x[j]+1);

  其中j满足y[j]=i。

  代码如下:

  

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
inline long long read(){
    long long num=0,f=1;
    char ch=getchar();
    while(!isdigit(ch)){
        if(ch==-)    f=-1;
        ch=getchar();
    }
    while(isdigit(ch)){
        num=num*10+ch-0;
        ch=getchar();
    }
    return num*f;
}

struct Edge{
    int next,to;
}edge[1001010];
int head[3000010],num;
inline void add(int from,int to){
    edge[++num]=(Edge){head[from],to};
    head[from]=num;
}

int f[3000010];
int m;

int main(){
    int n=read();
    for(int i=1;i<=n;++i){
        int x=read(),y=read();
        add(y,x);
        m=std::max(m,y);
    }
    for(int i=1;i<=m;++i){
        f[i]=f[i-1];
        for(int s=head[i];s;s=edge[s].next){
            int x=edge[s].to;
            f[i]=std::max(f[i],f[x-1]+i-x+1);
        }
    }
    printf("%d",f[m]);
    return 0;
}

 

【Luogu】P1868饥饿的奶牛(DP)

标签:show   blank   turn   位置   str   inline   etc   tps   return   

原文地址:http://www.cnblogs.com/cellular-automaton/p/7657304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!