这题说的是给了一个  长度为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. 微信jssdk批量添加卡券接口(踩坑经验)

    1)首先是官方接口文档: 1.批量添加卡券接口:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.0861973 ...

  2. MySQL性能优化(三)-- 索引

    一.什么是索引及索引的特点 索引是一种数据结构 索引的特点:查找速度快,排好序,数据结构 索引的数据结构类型有:BTREE索引和HASH索引,下面展示的是BTREE索引. BTREE:balance ...

  3. 点击一个textView里的link导航至程序内可返回的自定义webView

    1,在AppDelegate.h里定义一个 id currentViewController; 在AppDelegate.m里 @implementation UIApplication (Priva ...

  4. c++11——type_traits 类型萃取

    一. c++ traits traits是c++模板编程中使用的一种技术,主要功能:     把功能相同而参数不同的函数抽象出来,通过traits将不同的参数的相同属性提取出来,在函数中利用这些用tr ...

  5. java框架---->zxing框架的使用

    今天我们就来学习一下zxing的用法,这里只涉及到java se的部分. zxing的学习 如果在java se环境中使用zxing,需要在maven的pom.xml中添加依赖: <depend ...

  6. Excel ALT+小键盘的妙用

    用法就是摁住ALT不松,然后输入小键盘数字(一定要小键盘),再松开ALT就可以了 α     ALT+42689β     ALT+42690γ     ALT+42691δ     ALT+4269 ...

  7. Android Training - 管理应用的内存

    http://hukai.me/android-training-managing_your_app_memory/ Random Access Memory(RAM)在任何软件开发环境中都是一个很宝 ...

  8. sencha touch 扩展篇之将sencha touch打包成安装程序(下)- 使用phonegap打包安装程序

        这讲我们来讲解下如何使用phonegapa创建项目环境并通过她们将sencha touch打包成app,这里我们只讲解打包android的apk,打包ios的过程有点类似,但是需要在mac环境 ...

  9. js 生成二维码图片

    1.用纯JavaScript实现的微信二维码图片生成器 QRCode.js是javascript实现二维码(QRCode)制作生成库. QRCode.js有着良好的跨浏览器兼容性(高版本使用HTML5 ...

  10. 【BZOJ1818】[Cqoi2010]内部白点 扫描线+树状数组

    [BZOJ1818][Cqoi2010]内部白点 Description 无限大正方形网格里有n个黑色的顶点,所有其他顶点都是白色的(网格的顶点即坐标为整数的点,又称整点).每秒钟,所有内部白点同时变 ...