http://acm.hdu.edu.cn/showproblem.php?pid=5009

题意:一个数列,每个点代表一种颜色,每次选一个区间覆盖,覆盖的代价是区间内颜色种类数的平方,直到覆盖整个数列,求最小花费

思路:首先合并颜色相同的点,接着离散化颜色,做dp,dp[i]表示取到位置i的最小花费,注意到答案最大值应该是合并后的数列长度,这是一个剪枝,为了避免每次循环memset vis数组,要把每次访问的颜色值记录在一个vector中,然后只清vector内的颜色清空vector 即可

这道题总的来说出的感觉比较怪,时间卡的很死,复杂度也怪怪的(具体复杂度不会算,但觉得如此dp应该tle才对),还要用一些非常奇怪的小技巧(加vector数组)。题不难,但是网赛时能当场AC的人真的是胆大又自信。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std ; const int INF=0xfffffff ; int n,dp[] ; struct node
{
int num ;
int id,rank ;
}kk[] ;
int a[] ;
int vis[] ;
int cmp1(node aa,node bb)
{
return aa.num<bb.num ;
}
int cmp2(node aa,node bb)
{
return aa.id<bb.id ;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i= ;i<=n ;i++)
{
scanf("%d",&a[i]) ;
}
int m=n ;
for(int i= ;i<=n ;i++)
{
if(a[i]==a[i-])
{
m-- ;
}
}
int cnt= ;
kk[].id= ;kk[].num=a[] ;
for(int i= ;i<=n ;i++)
{
if(a[i]!=a[i-])
{
kk[cnt].id=cnt ;
kk[cnt].num=a[i] ;
cnt++ ;
}
}
/*
for(int i=1 ;i<=m ;i++)
{
printf("%d %d ",kk[i].num,kk[i].id) ;
}
printf("\n") ;
*/
sort(kk+,kk++m,cmp1) ;
kk[].rank= ;
cnt= ;
for(int i= ;i<=m ;i++)
{
if(kk[i].num!=kk[i-].num)
{
kk[i].rank=cnt++ ;
}
else kk[i].rank=kk[i-].rank ;
}
sort(kk+,kk++m,cmp2) ;
/*
for(int i=1 ;i<=m ;i++)
{
printf("%d ",kk[i].rank) ;
}
printf("\n") ;
*/
for(int i= ;i< ;i++)
dp[i]=INF ;
dp[]= ;
dp[m]=m ;
vector <int> v ;
for(int i= ;i<m ;i++)
{
cnt= ;
for(int j=i+ ;j<=m ;j++)
{
if(!vis[kk[j].rank])
{
v.push_back(kk[j].rank) ;
vis[kk[j].rank]= ;
cnt++ ;
}
if(dp[i]+cnt*cnt>=dp[m])break ;
dp[j]=min(dp[j],dp[i]+cnt*cnt) ;
}
//memset(vis,0,sizeof(vis)) ;
for(int j= ;j<v.size() ;j++)
vis[v[j]]= ;
v.clear() ;
}
printf("%d\n",dp[m]) ;
}
return ;
}

HDU 5009的更多相关文章

  1. hdu 5009 离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=5009 有一段序列,涂连续一段子序列的代价为该子序列出现不同数字个数的平方,求最小代价涂完整个序列. ai有10^ ...

  2. HDU 5009 Paint Pearls(西安网络赛C题) dp+离散化+优化

    转自:http://blog.csdn.net/accelerator_/article/details/39271751 吐血ac... 11668627 2014-09-16 22:15:24 A ...

  3. HDU 5009 Paint Pearls 双向链表优化DP

    Paint Pearls Problem Description   Lee has a string of n pearls. In the beginning, all the pearls ha ...

  4. hdu 5009 Paint Pearls

    首先把具有相同颜色的点缩成一个点,即数据离散化. 然后使用dp[i]表示涂满前i个点的最小代价.对于第i+1个点,有两种情况: 1)自己单独涂,即dp[i+1] = dp[i] + 1 2)从第k个节 ...

  5. HDU - 5009 Paint Pearls(dp+优化双向链表)

    Problem Description Lee has a string of n pearls. In the beginning, all the pearls have no color. He ...

  6. HDU 5009 DP

    2014 ACM/ICPC Asia Regional Xi'an Online 对于N个数 n(1 ≤ n ≤ 5×104), 把N个数分成随意个区间,每一个区间的值是该区间内不同数字个数的平方和, ...

  7. HDU 5009 Paint Pearls (动态规划)

    Paint Pearls Problem Description Lee has a string of n pearls. In the beginning, all the pearls have ...

  8. AC日记——Paint Pearls hdu 5009

    Paint Pearls 思路: 离散化+dp+剪枝: dp是个n方的做法: 重要就在剪枝: 如果一个长度为n的区间,有大于根号n种颜色,还不如一个一个涂: 来,上代码: #include <c ...

  9. DP 剪枝

    DP其实也是和搜索一样可以有剪枝的,昨晚看到一个超级好的DP剪枝题:(HDU - 5009) N段东东,要染色,每次给一个区间染色需要的花费为  该区间颜色总数的平方.  每一段只能被染一次色.求 最 ...

随机推荐

  1. codeforces723 D. Lakes in Berland(并查集)

    题目链接:codeforces723 D. Lakes in Berland 参考博客:http://www.cnblogs.com/Geek-xiyang/p/5930245.html #inclu ...

  2. 3大主流NoSQL数据库性能对比测试报告

    近日,知名独立基准测评机构Bankmark,针对目前市面上主流的NoSQL数据库SequoiaDB.MongoDB以及Cassandra三款NoSQL数据库产品做了性能对比测试并发布测试报告.在所有的 ...

  3. jQuery插件之ajaxFileUpload 2

      ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http ...

  4. java正则表达式之java小爬虫

    这个java小爬虫, 功能很简单,只有一个,抓取网上的邮箱.用到了javaI/O,正则表达式. public static void main(String[] args) throws IOExce ...

  5. 【工具推荐】ELMAH——可插拔错误日志工具

    今天看到一篇文章(构建ASP.NET网站十大必备工具(2)),里面介绍了一个ELMAH的错误日志工具,于是研究了一下. ELMAH 是 Error Logging Modules and Handle ...

  6. HDU 3642 扫描线(立方体体积并)

    Get The Treasury Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. MSMQ消息队列

    MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一 ...

  8. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  9. JSP初识

    JSP最终会变成一个完整的servlet在web应用中运行.它与其他的servlet非常相似,只不过这个servlet类会由容器编写. 1.JSP的生命周期 如果一个web应用包含JSP,部署这个应用 ...

  10. Linux面试基础题-2

    继续我们这面试系列,在这篇文章里我们给出了10个问题.这些问题或者是在以后的文章中出现的问题不一定在面试中会被问到.然而通过这些文章我们呈现出的是一个交互的学习平台,这必将会对你有很大的帮助. 自本系 ...