834D - The Bakery

思路:dp[i][j]表示到第j个数为止分成i段的最大总和值。

dp[i][j]=max{dp[i-1][x]+c(x+1,j)(i-1≤x≤j-1)},c(x+1,j)表示x+1到j的不同的值。

用线段树维护一下最大值。

上图最后一个点取不到,不解释,不明白请评论。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
#define pb push_back
const int INF=0x3f3f3f3f;
const int N=;
int tree[*N],lazy[*N];
int dp[][N];
int now[N],pre[N],a[N];
int i; void push_up(int rt)
{
tree[rt]=max(tree[rt<<],tree[rt<<|]);
} void push_down(int rt)
{
tree[rt<<]+=lazy[rt];
lazy[rt<<]+=lazy[rt];
tree[rt<<|]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
lazy[rt]=;
} void build(int rt,int l,int r)
{
if(l==r)
{
tree[rt]=dp[i-][l];
return ;
}
int m=(l+r)>>;
build(ls);
build(rs);
push_up(rt);
} void update(int p,int delta,int rt,int l,int r)
{
if(l==r)
{
tree[rt]+=delta;
return ;
}
int m=(l+r)>>;
if(p<=m)update(p,delta,ls);
else update(p,delta,rs);
push_up(rt);
} void Update(int L,int R,int delta,int rt,int l,int r)
{
if(L<=l&&r<=R)
{
tree[rt]+=delta;
lazy[rt]+=delta;
return ;
}
if(lazy[rt])push_down(rt);
int m=(l+r)>>;
if(L<=m)Update(L,R,delta,ls);
if(R>m)Update(L,R,delta,rs);
push_up(rt);
} int query(int L,int R,int rt,int l,int r)
{
if(L<=l&&r<=R)return tree[rt];
if(lazy[rt])push_down(rt);
int m=(l+r)>>,ans=;
if(L<=m)ans=max(ans,query(L,R,ls));
if(R>m)ans=max(ans,query(L,R,rs));
return ans;
} int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
memset(now,,sizeof(now));
for(int i=;i<=n;i++)
{
cin>>a[i];
pre[i]=now[a[i]];
now[a[i]]=i;
}
dp[][]=;
for(i=;i<=k;i++)
{
memset(tree,,sizeof(tree));
memset(lazy,,sizeof(lazy));
build(,,n);
for(int j=i;j<=n;j++)
{
Update(pre[j],j-,,,,n);
dp[i][j]=query(i-,j-,,,n);
}
}
cout<<dp[k][n]<<endl;
}
return ;
}

最新文章

  1. 【ORACLE】MD5加密
  2. SQL Server 数据缓存
  3. HTML5 Canvas眨眼睛动画
  4. JNI笔记1
  5. dex文件格式一
  6. C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”
  7. Python—判断变量的基本类型
  8. [No00001E]不出国,学口语-出国口语自然好?才怪咧!
  9. SQL Server2008窗口计算
  10. 看看 JDK 8 给我们带来什么(转)
  11. iOS开发 判断代理以及代理方法是否有人遵循
  12. node模拟http服务器session机制-我们到底能走多远系列(36)
  13. C,C++回文字符串判断(字符串指针的用法)
  14. 【JavaScript】javascript常用的东西
  15. ibdata1是?
  16. BZOJ 1878 SDOI 2009 HH项链 树状数组 + 脱机处理
  17. Chapter 13 建造者模式
  18. Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件
  19. JAVA_maven 配置
  20. 洛谷CF809C Find a car(数位DP)

热门文章

  1. C语言标准函数源代码
  2. Python: 序列: 过滤序列元素
  3. Java设计模式应用——策略模式
  4. TED #08# Learn to read Chinese ... with ease!
  5. mysql多实例安装与ssl认证
  6. ImageLoader作用 AAAA
  7. 20145318《网络对抗》MSF基础应用
  8. 20145329 《网络对抗技术》Web基础
  9. Ubuntu18.04安装Openssl-1.1.1
  10. [c/c++]指针(3)