hdu5009(dp+双向链表优化)
来源:互联网 发布:金属材料牌号查询软件 编辑:程序博客网 时间:2024/06/15 02:00
链接:点击打开链接
题意:给出一个长度是n的区间中每一个元素的颜色,每次只能选一个区间染色,染色的代价为这个区间不同颜色数的平方,问最小代价
代码:
#include <set>#include <map>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;const long long INF=0x3f3f3f3f3f3f3f3f;long long a[100005],dp[100005];long long pre[100005],nex[100005];int main(){ //dp[i]表示到第i位的最小花费 long long n,i,j,tmp; //也就知道状态转移方程为, while(scanf("%I64d",&n)!=EOF){ //dp[i]=min(dp[i],dp[j]+sum[j+1][i]*sum[j+1][i]) map<long long,long long> mp; //(1<=j<i),sum[i][j]为区间内的颜色种类 memset(dp,INF,sizeof(dp)); //但是复杂度为n*n,因此一定会超时 for(i=1;i<=n;i++){ scanf("%I64d",&a[i]); pre[i]=i-1,nex[i]=i+1; } dp[0]=0,pre[0]=-1; for(i=1;i<=n;i++){ //因此用双向链表进行优化,遇到出现过的数字 if(mp[a[i]]==0) //直接跳过 mp[a[i]]=i; else{ tmp=mp[a[i]]; nex[pre[tmp]]=nex[tmp]; pre[nex[tmp]]=pre[tmp]; mp[a[i]]=i; } tmp=0; for(j=pre[i];j!=-1;j=pre[j]){ tmp++; dp[i]=min(dp[i],dp[j]+tmp*tmp); if(tmp*tmp>i) break; } } printf("%d\n",dp[n]); } return 0;}
0 0
- hdu5009(dp+双向链表优化)
- hdu5009 离散化+dp+优化
- hdu5009 Paint Pearls(DP+STL优化)
- hdu5009 dp
- hdu5009 Paint Pearls DP
- DP - hdu5009 Paint Pearls
- HDU - 5009 Paint Pearls(dp+双向链表优化)
- HDU 5009 (dp+双向链表优化)
- hdu5009
- hdu5009 Paint Pearls(离散+线性dp)
- 2014西安网络预选赛1003(DP+剪枝)hdu5009
- ssoj1020编译优化(双向链表+堆优化)
- 代码优化之基于双向链表插入的实现
- 双向链表基本操作及代码优化技巧
- BZOJ 2151 种树 贪心 双向链表优化
- zoj 1149 双向dp
- poj2353--双向DP
- poj 2353 双向DP
- abstract的methods不能以private修饰(Java)
- Windows核心编程 第六章 线程基础知识 (上)
- 卡尔曼滤波(KF)与扩展卡尔曼滤波(EKF)的一种理解思路及相应推导(1)
- 微信分享闪退的解决办法
- 关联映射之多对一
- hdu5009(dp+双向链表优化)
- 在Unity中利用WinAPI实现在任何地方可以拖拽窗体
- javascipt学习
- 核心对象+持久对象全析(1)
- hdu 4592(高斯消元好题)
- leetcode 23.Merge k Sorted Lists
- Flask中render_template的使用和模板的继承
- 刷刷笔试题--[链表类编程]
- MySQL笔记一