Beautiful Spacing

  题意是给一个文本排版,求在满足题目所给要求的条件下,最长连续空格最小是多少.

  trick:  贪心地模拟是错的,至少无法证明正确性.

  正解应该是二分答案+验证.

  比较容易想到的验证方法是O(n^2)的.

  

 //    dp[i]  第i个单词能否为结尾
dp[] = true;
for ( i= ; i<=n ; i++ )
if (dp[i-])
{
for ( j=i+ ; j<=n ; j++ )
if (can(i,j)) dp[j] = true;
}

  但是第二层循环可以优化: 仔细分析可以发现如果当前的 can(i,j) = false , 那么can(i+1,j)也为false;

  所以用一个k记录当前最大的dp[]为true的下标,下次从k拓展就行了.

 llong cnt[maxn];
int n,w,x[maxn]; void input()
{
int i;
for ( i= ; i<=n ; i++ ) scanf("%d",&x[i]);
for ( i= ; i<=n ; i++ ) cnt[i] = cnt[i-]+x[i];
} bool dp[maxn]; bool check(int d)
{
int i,j,k;
llong sum;
memset(dp,,sizeof(dp));
dp[] = true;
for ( k=,i= ; i<=n ; i++ )
if (dp[i-])
{
for ( j=k ; j<=n ; j++ )
{
if (j<=i) continue;
sum = cnt[j]-cnt[i-]+j-i;
if (sum>w) break;
int space = w - sum;
int D = space/(j-i) + (space%(j-i)>) + ;
if (D<=d)
{
dp[j] = true;
k = j;
}
}
}
sum = cnt[n]-cnt[k]+n-k-;
if (sum<=w) return true;
else return false;
} void solv()
{
int l,r;
l = ;
r = (w-)/+;
while (l<r)
{
if (check(mid)) r=mid;
else l=mid+;
}
printf("%d\n",l);
} int main()
{
freopen("test.txt","r",stdin);
while (scanf("%d%d",&w,&n)!=EOF)
{
if (n+w==)break;
input();
solv();
}
return ;
}

UVALive 6190 Beautiful Spacing (2012 Tokyo regional)的更多相关文章

  1. uva live 6190 Beautiful Spacing (二分法+dp试 基于优化的独特性质)

    I - Beautiful Spacing Time Limit:8000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu ...

  2. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  3. 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest

    2014-2015 ACM-ICPC, Asia Tokyo Regional Contest A B C D E F G H I J K O O O O   O O         A - Bit ...

  4. HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】

    Yet Another Multiple Problem Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 65536/65536 K ...

  5. bzoj4692: Beautiful Spacing

    先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...

  6. [Regionals 2012 :: Asia - Tokyo ]

    链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=56 ...

  7. HDU 4465 - Candy(概率与数学优化)

    2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了 比较水的概率题 #include <stdio. ...

  8. HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)

    HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online) 题目链接http://acm.hdu.edu.cn/showp ...

  9. zoj 3659 Conquer a New Region The 2012 ACM-ICPC Asia Changchun Regional Contest

    Conquer a New Region Time Limit: 5 Seconds      Memory Limit: 32768 KB The wheel of the history roll ...

随机推荐

  1. c语言通过时间种子产生随机数并选出最大值以及下标

    1 #include <stdio.h> #include <stdlib.h> #include <time.h> //2016 10 10 void main( ...

  2. day52

    今天依旧 阅读2篇的整理 数学试卷一套 综合练习计算 政治视频一个 范帅长难句一个 翻译两句 作文大小各一个 linux基础 今天折腾最久的应该是linux了 自己重新手动安装了一下 遇到的不少问题在 ...

  3. poj 1466 Girls and Boys(二分匹配之最大独立集)

    Description In the second year of the university somebody started a study on the romantic relations ...

  4. Adroid APPIUM实例步骤

      1.下载eclipse 2.安装java 配置环境变量 3.eclipse 安装adt android development tools 4.android sdk manager 安装tool ...

  5. swift 弹窗

    直接拷贝使用即可 let alert = UIAlertController(title:nil,message:"输入不能为空",preferredStyle: .Alert) ...

  6. UVA 825 Walking on the Safe Side(记忆化搜索)

      Walking on the Safe Side  Square City is a very easy place for people to walk around. The two-way ...

  7. Qt Label show Images

    第一.我们需要让QLabel的大小不因为图片的大小变化而变化,可以用下面语句实现 ui->imageLabel->setSizePolicy(QSizePolicy::Ignored, Q ...

  8. sql server 2008 中的架构(schame)理解

    机构是属于数据库里面的.在一个数据库中,每一张表都属于一个架构,架构就像是命名空间,把数据库中的表分成不同的组,一个组就是一个命名空间,方便管理

  9. Python进阶之路---1.3python环境搭建

      python环境安装 windows python环境安装 下载安装包     https://www.python.org/downloads/ 安装并指定安装目录     C:\python2 ...

  10. UIApplication的作用

    1.设置app图标右上角的数字2.设置状态栏的属性(样式.是否要显示)3.打开某个链接\发短信\打电话4.keyWindow : 访问程序的主窗口(一个程序只能有一个主窗口)5.windows : 访 ...