DP Cleaning Up 打扫卫生

来源:互联网 发布:分答软件下载 编辑:程序博客网 时间:2024/06/08 10:42

问题 A: Cleaning Up 打扫卫生
时间限制: 1 Sec 内存限制: 128 MB
题目描述
[Usaco2009 Mar]Cleaning Up 打扫卫生
Description
有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000。现在Farmer John要把这些奶牛分成若干段,定义每段的不河蟹度为:若这段里有k个不同的数,那不河蟹度为k*k。那总的不河蟹度就是所有段的不河蟹度的总和。
Input
第一行:两个整数N,M
第2..N+1行:N个整数代表每个奶牛的编号
Output
一个整数,代表最小不河蟹度
Sample Input
13 4
1
2
1
3
2
2
3
4
3
4
3
1
4
Sample Output
11

我承认我没打正解。。正解N^1.5,我打了个假N^2.
对于f[i],应该是把j~i一段合并起来,f[i]=min(f[j-1]+s*s);
s为区间j~i中出现的个数。
剪枝:倒着找,s*s>i则直接跳出。
就这样水过了。。。

#pragma GCC optimize("O3")#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define N 40005#define ll long longusing namespace std;int read(){    int sum=0,f=1;char x=getchar();    while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}    while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}    return sum*f;}int n,m,tot,a[N],f[N];bool vis[N];int main(){    n=read();m=read();int x;    memset(f,120,sizeof(f));    for(int i=1;i<=n;i++)    {        x=read();if(x==a[tot])continue;        a[++tot]=x;    }    f[0]=0;    for(int i=1;i<=tot;i++)    {        memset(vis,0,sizeof(vis));int s=0;f[i]=i;        for(int j=i;j>0;j--)        {            if(s*s>i)break;            if(!vis[a[j]])vis[a[j]]=1,s++;            if(f[i]>f[j-1]+s*s)f[i]=f[j-1]+s*s;        }        //cout<<f[i]<<endl;    }    cout<<f[tot];}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 黑色纯棉裤子洗的发白怎么办 金盾保险柜密码忘了怎么办 装修好的房子漏水怎么办 刚装修的房子墙面开裂怎么办 刚装修的房子有味道怎么办 代销产品规格填写不完整怎么办 我的信息被泄露怎么办 进入不良网站手机发信息怎么办 发不良信息被停机了怎么办 手机qq登录显示被冻结怎么办 qq账户被冻结了怎么办 qq钱包账户被永久冻结怎么办 怎么办转让费还没给我 收钱吗不能抵用红包怎么办 红包抵扣被关了怎么办 天猫客户给差评怎么办 淘宝闪电退款有纠纷怎么办呀 手机屏幕右下角出现彩色点怎么办 在超市买到假货怎么办 天猫超市多发货怎么办 天猫中不小心取消退款了怎么办 天猫超市写错了怎么办 二维码收付款不到红包怎么办 天猫优惠劵过期了怎么办 天猫购物津贴用不完怎么办 天猫上买的大件东西实物不符怎么办 天猫上面料成分与实物不符怎么办 闲鱼发货与实物不符怎么办 天猫超市买贵了怎么办 天猫超市里购买的东西退货怎么办 淘宝店上传的图片不清楚怎么办 微信图片打印出来不清楚怎么办 微信图片打印不清楚怎么办 淘宝上传商品视频不清楚怎么办 手机安装器没了怎么办 我不做直播换工作怎么办 天猫发票被投诉怎么办 天猫机顶盒闪退怎么办 苹果8红色掉漆怎么办 毛坯房验房房及厅试水时漏水怎么办 淘宝退货赠品被拆了怎么办