• Luogu【P2904】跨河(DP)


    题目链接在这里

    此题DP。用一个前缀和一样的东西,把载i个奶牛的时间求出来,然后DP代码如下:

    for(int i=1;i<=n;++i){
        f[i]=que[i];
        for(int j=0;j<i;++j)    f[i]=min(f[i],f[j]+que[i-j]);
    }

    这句话的意思是说,先载i头奶牛,然后从载0头到载i-1头寻找,看有没有更优解。如果有,那么更新。

    最后输出的时候输出DP[n]-m,因为最后FJ是不用再回对岸的

    放上代码

    #include<cstdio>
    #include<cstdlib>
    #include<cctype>
    using namespace std;
    
    inline long long min(long long a,long long b){    return a<b?a:b;    }
    
    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<<1)+(num<<3)+ch-'0';
            ch=getchar();
        }
        return num*f;
    }
    
    int que[1000000];
    int f[1000000];
    
    int main(){
        int n=read(),m=read();
        que[0]=m<<1;
        for(int i=1;i<=n;++i)    que[i]=que[i-1]+read();
        for(int i=1;i<=n;++i){
            f[i]=que[i];
            for(int j=0;j<i;++j)    f[i]=min(f[i],f[j]+que[i-j]);
        }
        printf("%d",f[n]-m);
        return 0;
    }
  • 相关阅读:
    pyinstaller guid
    python filter()和map()函数
    python eval()
    day6
    repr()函数是什么鬼?
    fibonacci_question
    冒泡算法
    python 函数
    day4作业
    NOIp 2013 #1 积木大赛 Label:有趣的模拟
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/7061430.html
Copyright © 2020-2023  润新知