这题说的是给了一个  长度为n(n<=50000)的数列,数列表示的是给每个珍珠涂的颜色,任务是将一窜长度为n的珍珠涂成他所要的颜色。然后你可以操至多n次, 每次画只能画连续的区间,每次操作是的代价是这个区间内不同颜色的个数,

可以知道最多的代价是区间的长度。 然后 可以知道当这个区间内不同颜色的个数大于如果大于sqrt(n)那还不如一个一个涂花费少,然后现在就剩下处理理当前位置j种颜色的达到的最远距离, 找到这个点对于之前出现相同的颜色的位置用per[i]记录, flow[i][j] 表示 距离i这个位置 有j中不同颜色的最远距离,可以从flow[i-1][j] 来 如果per[i]>i-1-flow[i-1][j] 那么可以知道这个点一定在flow[i-1][j] 内出现过 自然最远距离再加1, 如果不成立则他的最远距离就是 flow[i-1][j-1]+1,然后dp[i] 为前多少种颜色合并时花费的代价最小。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
const int maxn =*;
int A[maxn],B[maxn];
int F[maxn],per[maxn];
int flow[][maxn];
int dp[maxn];
int main()
{
int n;
while(scanf("%d",&n)==){
for(int i=; i<=n; i++){
scanf("%d",&A[i]);
B[i-]=A[i];
}
sort(B,B+n);
int len = unique( B, B+n )-B;
for(int i=; i<=n; i++){
A[i]= lower_bound(B,B+len,A[i])-B;
}
memset(F,-,sizeof(F));
int m=;
for(int i=; i<=n; ++i){
if(A[m-]!=A[i]){
A[m++]=A[i];
}
}
for(int i= ; i<m; ++i){
per[i]=F[A[i]];
F[A[i]]=i;
}
memset(flow,,sizeof(flow));
int now=;
int L =sqrt(m+1.0);
for(int i=; i<m; ++i){
dp[i]=i;
now=-now;
for(int j=; j<=L; ++j){
flow[now][j]=per[i]>i--flow[-now][j]?flow[-now][j]+:flow[-now][j-]+;
dp[i]=min(dp[i],j*j+dp[i-flow[now][j]]);
}
}
printf("%d\n",dp[m-]);
} return ;
}

hdu5009的更多相关文章

  1. HDU-5009 Paint Pearls 动态规划 双向链表

    题目链接:https://cn.vjudge.net/problem/HDU-5009 题意 给一串序列,可以任意分割多次序列,每次分割的代价是被分割区间中的数字种数. 求分割区间的最小代价.n< ...

  2. hdu5009 Paint Pearls (DP+模拟链表)

    http://acm.hdu.edu.cn/showproblem.php?pid=5009 2014网络赛 西安 比较难的题 Paint Pearls Time Limit: 4000/2000 M ...

  3. hdu-5009 Paint Pearls DP+双向链表 with Map实现去重优化

    http://acm.hdu.edu.cn/showproblem.php?pid=5009 题目要求对空序列染成目标颜色序列,对一段序列染色的成本是不同颜色数的平方. 这题我们显然会首先想到用DP去 ...

  4. hdu5009 Paint Pearls[指针优化dp]

    Paint Pearls Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. 2014 ACM/ICPC Asia Regional Xi'an Online

    03 hdu5009 状态转移方程很好想,dp[i] = min(dp[j]+o[j~i]^2,dp[i]) ,o[j~i]表示从j到i颜色的种数. 普通的O(n*n)是会超时的,可以想到o[]最大为 ...

  6. qbxt Day3 其余题

    例题1 noiopenjudge9277 给出在最底层的木头的个数,问有多少种堆放木头的方式,当然你的堆放方式不能让木头掉下来. 在堆放的时候木头必须互相挨着在一起. 设dp[i]表示多少个log(原 ...

  7. [总结-动态规划]经典DP状态设定和转移方程

    马上区域赛,发现DP太弱,赶紧复习补上. #普通DP CodeForces-546D Soldier and Number Game 筛法+动态规划 待补 UVALive-8078 Bracket S ...

随机推荐

  1. python2.0_s12_day12_css样式详解

    CSScss是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. CSS 存放方式有三种: 一种写法:在<body></body>内部 ...

  2. pl/sql编程2-综合

    案例1,要求:可以向book表添加书,并通过Java程序调用该过程1.1 创建表 ),publishHosuse )); 1.2 编写过程,无返回值 create or replace procedu ...

  3. android中用studio更改包名

    Android Studio,咱们开发安卓的利器,自推出就受到移动开发者的追捧,但一路走来,大家谈到他,充满了兴奋之情之余,也略显羞涩.随版本自推出以来,不断完善BUG,但咱们还是深深地踩了进去,说多 ...

  4. ubuntu系统无eth0网卡解决办法

    ubuntu终端下命令ifconfig的问题解决 问题一. ifconfig之后只显示lo,没有看到eth0 问题二. ifconfig之后显示eth0,但是没有显示静态IP地址,即无inet.地址. ...

  5. 新唐ARM9之NUC972学习历程之系统的搭建和BSP包的使用

    说到嵌入式,我们首先想到的,就是它的复杂程度,LINUX,BSP,UBOOT,交叉编译,寄存器配置,等等一系列的问题,甚至有的时候我们对此一头雾水,很是头疼,不过我们今天要说的就是关于NUC972的一 ...

  6. js部署中如何提高页面加载速度

    1.合并js文件,减少http请求数量. 2.对js文件进行压缩 3.以gzip的形式提供js 4.使js文件可缓存 5.使用CDN

  7. hdu5305 Friends[状压dp]

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  8. 【BZOJ2743】[HEOI2012]采花 离线+树状数组

    [BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...

  9. 微信小程序 --- 事件绑定

    事件类别: tap:点击事件: longtap:长按事件: touchstart:触摸开始: touchend:触摸结束: touchcansce:取消触摸: 事件绑定: bind绑定: catch绑 ...

  10. SElinux以及防火墙的关闭

    [root@localhost targeted]# pwd/etc/selinux/targeted[root@localhost targeted]# getsebool -a|grep samb ...