Paint Pearls

思路:

  离散化+dp+剪枝;

  dp是个n方的做法;

  重要就在剪枝;

  如果一个长度为n的区间,有大于根号n种颜色,还不如一个一个涂;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;#define maxn 50005int n,ai[maxn],dp[maxn],ls[maxn],size,num,map[maxn];inline void in(int &now)
{char Cget=getchar();now=0;while(Cget>'9'||Cget<'0') Cget=getchar();while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();}
}int main()
{while(scanf("%d",&n)==1){num=0;for(int i=1;i<=n;i++){in(ai[i]);if(ai[i]==ai[i-1]){n--,i--;continue;}ls[i]=ai[i];}sort(ls+1,ls+n+1),size=unique(ls+1,ls+n+1)-ls-1;for(int i=1;i<=n;i++) ai[i]=lower_bound(ls+1,ls+size+1,ai[i])-ls,map[ai[i]]=0;for(int i=1;i<=n;i++){if(!map[ai[i]]) num++;map[ai[i]]++,dp[i]=min(num*num,i);}for(int i=1;i<=n;i++) map[ai[i]]--;for(int i=1;i<=n;i++){if(dp[i]>=dp[i+1]) continue;num=0;for(int j=i+1;j<=n;j++){if(!map[ai[j]]) num++;if(num*num+dp[i]>=dp[n]){for(int v=j-1;v>=i+1;v--) map[ai[v]]--;break;}map[ai[j]]++,dp[j]=min(dp[j],dp[i]+num*num);}}printf("%d\n",dp[n]);}return 0;
}

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6814225.html

AC日记——Paint Pearls hdu 5009相关推荐

  1. HDU - 5009 Paint Pearls dp + 链表 + 下界优化

    传送门:HDU 5009 题意:给出n个连续的珠子,珠子有不同的颜色,现将其划分成任意多段,每一段的代价为该段中颜色种数的平方,问划分的最小总代价和是多少. 总思路:dp[i]代表处理到第i个珠子的最 ...

  2. 【HDU - 5009】Paint Pearls(dp,链表优化dp)

    题干: Lee has a string of n pearls. In the beginning, all the pearls have no color. He plans to color ...

  3. HDU 自动刷题机 Auto AC (轻轻松松进入HDU首页)

    前言: 在写这篇文章之前,首先感谢给我思路以及帮助过我的学长们 以下4篇博客都是学长原创,其中有很多有用的,值得学习的东西,希望能够帮到大家! 1.手把手教你用C++ 写ACM自动刷题神器(冲入HDU ...

  4. AC日记——传染病控制 洛谷 P1041

    传染病控制 思路: 题目想问的是: 有一棵树: 对于除1外每个深度可以剪掉一棵子树: 问最后剩下多少节点: 题目意思一简单,这个题立马就变水了: 搜索就能ac: 数据有为链的情况,按深度为层次搜索的话 ...

  5. AC日记——中位数 洛谷 P1168

    题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], -, A[2k - 1]的中位数.[color=red]即[/color] ...

  6. AC日记——约瑟夫问题 codevs 1282

    1282 约瑟夫问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果 题目描述 Description 有编号从1到N的N个小朋友在玩 ...

  7. AC日记——逃出克隆岛 (bfs)

    2059 逃出克隆岛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述  Description oi小组的yh酷爱玩魔兽rpg,每天都会在u9搜 ...

  8. AC日记——[Hnoi2017]影魔 bzoj 4826

    4826 思路: 主席树矩阵加减+单调栈预处理: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 200005 ...

  9. AC日记——小书童——刷题大军 洛谷 P1926

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...

最新文章

  1. ionic4中使用Swiper触屏滑动--技术
  2. SQL中关联表并使用子表的COUNT和SUM函数作为扩展字段
  3. 苹果企业证书_苹果签名经常掉签原因大汇总
  4. 北京理工大学计算机学院赵曜,北理工学子参加第十届蓝桥杯全国软件和专业人才大赛取得佳绩...
  5. 微型计算机由5大部分,微机原理答案 (5)
  6. Ubuntu环境下的VirtualBox,连接Redhat虚拟机的步骤
  7. modbus测试plc软件,MODBUS RTU设备测试调试工具官方版
  8. 在win中搭建IOS自动化
  9. 虚拟机桥接模式配置网络
  10. qq音乐服务器的位置,QQ音乐的歌曲真实地址解析
  11. LidarSLAM(一):NDT
  12. 机械革命笔记本开关键盘亮度
  13. 软考分类精讲-知识产权与标准化
  14. 系统安全的三个方面(CIA)
  15. 打计算机游戏用英语怎么说,打游戏用英语怎么说
  16. python实用案例题
  17. 怎样把计算机扫描放到桌面上,Win10系统怎么把画图/扫描等小工具添加到桌面
  18. stm32 驱动 TFT LCD
  19. Python逆向进阶:Web逆向私单
  20. Google、Baidu、FB股权分配

热门文章

  1. 谈谈你对AOP的理解
  2. ThreadPoolTaskExecutor和ThreadPoolExecutor区别
  3. 程序人生:入门程序员最容易踩的 7 个坑!
  4. 后端技术:命名不规范,lombok泪两行!
  5. 关系数据库基础知识介绍
  6. Linux常见英文报错中文翻译(菜鸟必知)
  7. Jquery实用笔记
  8. jstl mysql_java – jsp jstl sql与mysql中的奇怪行为
  9. 类从未使用_如果您从未依赖在线销售,如何优化您的网站
  10. React 入门手册