hdu Paint Pearls 5009
来源:互联网 发布:java和php全面对比 编辑:程序博客网 时间:2024/06/01 10:34
涂色最麻烦的方案就是每个点涂一次颜色,花费为n,故不管怎么样任何一次涂色都不能有大于sqrt(n)种颜色。
然后就可以写个dp了,dp[i]存储涂完前i个珍珠的花费,记录一个left数组,left[j]表示用j种颜色能涂到的最左边的左边一个。
然后递推dp[i]时就枚举j求一个dp[left[j]]+j*j最小就行了,求dp[i]时的left[j]时,用before记录dp[i-1]的left[j-1],然后就很好推了。
#include<cstdio>#include<cmath>#include<iostream>#include<cstring>using namespace std;int Scan() //输入外挂{ int res=0,ch,flag=0; if((ch=getchar())=='-') flag=1; else if(ch>='0'&&ch<='9') res=ch-'0'; while((ch=getchar())>='0'&&ch<='9') res=res*10+ch-'0'; return flag?-res:res;}int dp[50010],a[50010],Left[225],before;int main(){ int n; while(scanf("%d",&n)!=EOF) { getchar(); for(int i=1;i<=n;i++)a[i]=Scan(); memset(Left,0,sizeof(Left)); memset(dp,0,sizeof(dp)); int t=sqrt(n);a[0]=0; for(int i=1;i<=n;i++) { dp[i]=i; for(int j=1;j<=t;j++) { if(j==1) { before=Left[j]; if(a[i]!=a[i-1])Left[j]=i-1; else break; } else { if(a[before]!=a[i]) { int temp=Left[j]; Left[j]=before; before=temp; } else break; } } for(int j=1;j<=t;j++)dp[i]=min(dp[i],dp[Left[j]]+j*j); } printf("%d\n",dp[n]); } return 0;}
0 0
- hdu 5009 Paint Pearls
- hdu Paint Pearls 5009
- hdu 5009 Paint Pearls
- hdu 5009 Paint Pearls
- hdu 5009 Paint Pearls
- HDU 5009 Paint Pearls
- HDU 5009 Paint Pearls
- hdu 5009 Paint Pearls(dp)
- 【HDU】5009 Paint Pearls DP
- hdu 5009 Paint Pearls(dp)
- Hdu 5009 Paint Pearls(dp)
- hdu-5009-Paint Pearls-dp
- Paint Pearls(HDU 5009)
- HDU 5009 Paint Pearls (动态规划)
- hdu 5009 Paint Pearls (动态规划)
- HDOJ 5009 Paint Pearls
- HDU 5009 Paint Pearls(西安网络赛C题)
- HDU 5009 Paint Pearls 解题报告(DP)
- 搜索查找 - 算法学习
- fedora 20 可用的键盘快捷键(官方帮助文档)
- mbed OS - ARM关于物联网(IoT)的战略布局
- Populating Next Right Pointers in Each Node
- PAT 3-05 求链式线性表的倒数第K项(C语言实现)
- hdu Paint Pearls 5009
- spring mvc整合easyui菜单栏目树点击顶级菜单问题
- Linux下置空文件的方法小结
- php Laravel框架学习(四) 之 表单与HTML
- WildFly/JBoss上修改项目上下文
- 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
- Codeforces Round #250 (Div. 2) A B C
- swift学习之路——UIDatePicker
- 求滑动窗口的最小值