给你一个序列,让你划分成K段,每段的价值是其内部权值的种类数,让你最大化所有段的价值之和。

裸dp

f(i,j)=max{f(k,j-1)+w(k+1,i)}(0<=k<i)

先枚举j,然后枚举i的时候,用线段树进行优化,对a(i)上一次出现的位置到i之间的f(k,j-1)的答案进行+1,然后求个i的前缀max。

要注意线段树区间加的时候其实要包含上0。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define lson rt<<1,l,m
#define rson rt<<1|1,m+1,r
int n,m,a[35010],f[35010][60];
int maxv[35010<<2];
int delta[35010<<2];
void pushdown(int rt)//将rt结点的懒惰标记下传
{if(delta[rt]){delta[rt<<1]+=delta[rt];//标记下传到左结点 delta[rt<<1|1]+=delta[rt];//标记下传到右结点 maxv[rt<<1]+=delta[rt];maxv[rt<<1|1]+=delta[rt];delta[rt]=0;}
}
void update(int ql,int qr,int v,int rt,int l,int r)
{if(ql<=l&&r<=qr){delta[rt]+=v;//更新当前结点的标记值 maxv[rt]+=v;return ;}pushdown(rt);//将该节点的标记下传到孩子们 int m=(l+r)>>1;if(ql<=m)update(ql,qr,v,lson);if(m<qr)update(ql,qr,v,rson);maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
}
int query(int ql,int qr,int rt,int l,int r)
{if(ql<=l&&r<=qr)return maxv[rt];pushdown(rt);//将该节点的标记下传到孩子们 int m=(l+r)>>1;int res=-2147483647;if(ql<=m)res=max(res,query(ql,qr,lson));if(m<qr)res=max(res,query(ql,qr,rson));return res;
}
int now[35010],last[35010];
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i){scanf("%d",&a[i]);}for(int i=1;i<=n;++i){last[i]=now[a[i]];now[a[i]]=i;}for(int j=1;j<=m;++j){if(j!=1){memset(maxv,0,sizeof(maxv));memset(delta,0,sizeof(delta));for(int i=j-1;i<=n;++i){update(i,i,f[i][j-1],1,0,n);}}update(max(last[j],j-1),j-1,1,1,0,n);f[j][j]=j;for(int i=j+1;i<=n;++i){update(max(last[i],j-1),i-1,1,1,0,n);f[i][j]=query(j-1,i-1,1,0,n);}}printf("%d\n",f[n][m]);return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/7261165.html

【动态规划】【线段树】 Codeforces Round #426 (Div. 1) B. The Bakery相关推荐

  1. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  2. Codeforces Round #737 (Div. 2) D. Ezzat and Grid 线段树动态开点

    传送门 文章目录 题意: 思路: 题意: 思路: 比较套路的一个题,我们维护一个dp[i]dp[i]dp[i]表示到了第iii行能保留的区间最多是多少. 转移比较明显:dp[i]=max(dp[j]) ...

  3. Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力

    传送门 文章目录 题意: 思路: 题意: 给你一个只有ANTOANTOANTO四个字母的字符串,你每次可以交换相邻两个,花费为111,让后让你打乱字符串,使得将打乱的字符串还原为原来的字符串的花费最小 ...

  4. Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version) dp + 线段树

    传送门 文章目录 题意: 思路: 题意: 比如下面这个图: 思路: 对于这个题,比较容易就能考虑到dpdpdp,设f[i][j]f[i][j]f[i][j]为到了第iii行,覆盖了[j,j+k−1][ ...

  5. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

  6. Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr. (2)(2)(2) 求ϕ(∏i= ...

  7. Codeforces Round #285 (Div. 2) D. Misha and Permutations Summation 康托展开 + 线段树

    传送门 文章目录 题意: 思路: 题意: 思路: 首先肯定不能模n!n!n!,所以考虑先将a,ba,ba,b做一个逆康托展开,得到a′,b′a',b'a′,b′数组,以及a′+b′=suma'+b'= ...

  8. Codeforces Round #675 (Div. 2) F. Boring Queries 区间lcm + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,qqq个询问,每次询问[l,r][l,r][l,r]内的lcmlcmlcm是多少,对1e9+71e9+71e9+7取模. n ...

  9. C. Tyler and Strings(组合数学,树状数组维护前缀和)(Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad i)

    对我来说比较困难的一题了,尝试着自己写了一下,调不出来遂放弃. Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Info ...

最新文章

  1. 小组级git服务器搭建
  2. python在线课程-开始网上在线深度学习python课程
  3. PGA Usage Larger than PGA_AGGREGATE_TARGET setting?
  4. spring源码学习一
  5. 项目开发中关于jquery中出现问题小结(textarea,disabled,关键字等)
  6. mysql语句 java变量_Java操作Mysql的方法
  7. C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
  8. AndroidManifest详解
  9. NHibernate教程(5)--CRUD操作
  10. oracle tovarchar2_Oracle 数据类型转换之 varchar2,number,date
  11. mysql5.3.4 mac 配置_Mac下安装与配置MySQL
  12. 网站建设过程中的:重要页面、关键页面、过程页面、结果页面
  13. 【马克思主义基本原理】--第一章--【世界的物质性及发展规律】
  14. 计算机中的信息计量单位字,计算机计量单位
  15. maven 导入jar包失败编译代码失败解决方案
  16. Android apk安全监测及加固方案
  17. 机器学习_深度学习毕设题目汇总——人脸B
  18. 如何写产品介绍PPT
  19. TCP/IP-单播是如何实现的
  20. 《数据结构与算法》——Java版

热门文章

  1. mysql 冷热表_Redis+MySQL冷热数据交换
  2. 机器学习之 weka学习(一)weka介绍,安装和配置环境变量
  3. .mat,.txt,.csv 数据转换为weka中的arff格式及matlab和Weka之间相互转换格式
  4. 设计模式之模板方法模式实战解析
  5. vue官方eslint插件配置eslint-plugin-vue-libs
  6. 高级组件——弹出式菜单JPopupMenu
  7. asp 之 让实体中字段类型为DateTime的字段仅仅显示日期不显示时间
  8. 对于Eclipse的正确用法
  9. iOS设计模式 ——单例模式详解以及严格单例模式注意点
  10. Flask 中内置的 Session