• 507 LOJ 「LibreOJ NOI Round #1」接竹竿


    思路:这个题是在一个n2的复杂度之上进行了dp方程的优化变形,最后变成线性dp,但还是有一些不懂(菜是本质,%oi爷们)

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+5;
    typedef long long LL;
    int n,k;
    int col[maxn];
    LL dp[maxn],sum[maxn],val[maxn];
    
    bool Eoln(char ch) {return ch==10||ch==13||ch==EOF;}
    char readc()
    {
        static char buf[100000],*l=buf,*r=buf;
        if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);
        if (l==r) return EOF; else return *l++;
    }
    int readi(int &x)
    {
        int tot=0,f=1;char ch=readc(),lst='+';
        while ('9'<ch||ch<'0') {if (ch==EOF) return EOF;lst=ch;ch=readc();}
        if (lst=='-') f=-f;
        while ('0'<=ch&&ch<='9') tot=tot*10+ch-48,ch=readc();
        x=tot*f;
        return Eoln(ch);
    }
    
    int main()
    {
        readi(n),readi(k);
        for(int i=1;i<=n;i++) readi(col[i]);
        int a;
        for(int i=1;i<=n;i++) readi(a),sum[i]=sum[i-1]+a;
        memset(val,-0x3f,sizeof(val));
        for(int i=1;i<=n;i++){
            dp[i]=dp[i-1];
            dp[i]=max(dp[i],val[col[i]]+sum[i]);
            val[col[i]]=max(val[col[i]],dp[i-1]-sum[i-1]);
        }
        printf("%lld
    ",dp[n]);
        return 0;
    }
  • 相关阅读:
    Hadoop Partitioner编程
    Hadoop Mapreduce之WordCount实现
    在linux下编写maven程序
    Hadoop RPC通信机制
    Hadoop 源码分析——Job提交过程
    HDFS的java接口
    hadoop 文件系统shell命令
    同步 vs 异步
    C++ STL详解
    C++中struct和class定义类区别
  • 原文地址:https://www.cnblogs.com/lalalatianlalu/p/8439718.html
Copyright © 2020-2023  润新知