由题意我们能够知道,花费最多为n。

所以单次最多涂掉sqrt(n)种颜色。

dp[i]:涂到第i个位置。之前的花费最少为多少。

biao[i][j]:在第i个位置,往前涂j-1种颜色,涂到哪个位置。

vis[i]:i颜色最后出现的位置,不存在等于-1。

我们先离散化颜色。

然后非常显然转移方程:

dp[i]=min(dp[i],dp[biao[i][j]]+(j+1)*(j+1));

重点是biao[i][j]怎么求;

假如a[i]=x;

假设vis[x]=-1,那么非常显然biao[i][j]=biao[i-1][j-1];

否则vis[x]=y:

那么假设biao[i-1][j]>y。biao[i][j]=biao[i-1][j-1];

假设biao[i-1][j]<=y,biao[i][j]=biao[i-1][j];

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<math.h>
#include<queue>
#include<stack>
#include<map>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
#define maxn 55000
#define mod 10000007
#define LL __int64
int vis[maxn];
int dp[maxn];
int biao[2][301];
int a[maxn];
struct list
{
int x;
int id;
friend bool operator <(const list &a,const list &b)
{
return a.x<b.x;
}
}nn[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
nn[i].x=a[i];
nn[i].id=i;
}
sort(nn+1,nn+n+1);
for(int i=1; i<=n; i++)
{
if(nn[i].x!=nn[i-1].x)
{
a[nn[i].id]=i;
}
else
{
a[nn[i].id]=a[nn[i-1].id];
}
}
memset(vis,-1,sizeof(vis));
memset(dp,0,sizeof(dp));
memset(biao,-1,sizeof(biao));
int m=sqrt(1.0*n);
for(int i=1; i<=n; i++)
{
int x=a[i];
int k=i&1;
int ks=(!k);
if(x!=a[i-1])biao[k][0]=i-1;
else biao[k][0]=biao[ks][0];
dp[i]=dp[biao[k][0]]+1;
int p;
p=-1;
for(int j=1; j<=m; j++)
{
if(vis[x]==-1||vis[x]<biao[ks][j-1])biao[k][j]=biao[ks][j-1];
else
{
biao[k][j]=biao[ks][j];
}
if(biao[k][j]==-1)break;
dp[i]=min(dp[i],dp[biao[k][j]]+(j+1)*(j+1));
}
vis[x]=i;
}
printf("%d\n",dp[n]);
}
return 0;
}

最新文章

  1. 腾讯新浪通过IP地址获取当前地理位置(省份)的接口
  2. cf708B. Recover the String---(构造法)
  3. Starting MySQL...The server quit without updating PID file
  4. UML类图几种关系的总结[转]
  5. Intent.Action
  6. 【POJ3208】 (DP)
  7. Qt中文乱码问题(比较清楚,同一个二进制串被解释成不同的语言)
  8. postgresql 修改属性
  9. Memcached函数整理
  10. MD5加盐 Java加密算法
  11. iOS监听模式系列之推送消息通知
  12. (1)wr703n刷openwrt智能控制--配置wifi
  13. freemarker知识点
  14. 大佬是怎么思考设计MySQL优化方案的?
  15. P1171 售货员的难题--搜索(剪枝)
  16. 一、PHP_OSS使用
  17. Docker自制CentOS镜像
  18. unix下命令窗分屏工具
  19. 堆排序(php实现)
  20. Java Spring-Spring框架概述

热门文章

  1. mysql5.7下载与安装,php5.6与mysql5.7整合
  2. C对字符串的部分操作
  3. iOS: performSelectorOnMainThread(译)
  4. 关于Java(常用数据类型)
  5. C/C++ 中的0长数组(柔性数组)
  6. 监控Activity在前后台状态的切换
  7. poj3580
  8. Unity3d 屏幕空间人体皮肤知觉渲染&amp;次表面散射Screen-Space Perceptual Rendering &amp; Subsurface Scattering of Human Skin
  9. unity3d Human skin real time rendering with blood and water drop effect真实模拟人皮实时渲染之血液和水珠掉落效果
  10. BlogEngine.Net