博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
507 LOJ 「LibreOJ NOI Round #1」接竹竿
阅读量:4324 次
发布时间:2019-06-06

本文共 1092 字,大约阅读时间需要 3 分钟。

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

代码:

#include 
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'
<'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\n",dp[n]); return 0;}

 

转载于:https://www.cnblogs.com/lalalatianlalu/p/8439718.html

你可能感兴趣的文章
JavaBean规范
查看>>
第四阶段 15_Linux tomcat安装与配置
查看>>
NAS 创建大文件
查看>>
学习笔记-模块之xml文件处理
查看>>
接口测试用例
查看>>
面试:用 Java 实现一个 Singleton 模式
查看>>
Sybase IQ导出文件的几种方式
查看>>
案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变...
查看>>
PCRE demo【转】
查看>>
矩阵的SVD分解
查看>>
性能优化之数据库优化
查看>>
linux 系统下 tar 的压缩与解压缩命令
查看>>
阿里负载均衡,配置中间证书问题(在starcom申请免费DV ssl)
查看>>
转:How to force a wordbreaker to be used in Sharepoint Search
查看>>
MySQL存储过程定时任务
查看>>
Python中and(逻辑与)计算法则
查看>>
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
音视频处理
查看>>
tomcat 7服务器跨域问题解决
查看>>