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. 单片微机原理P4:80C51串口与串行总线拓展

    0. 串口通讯 0. 串口通讯的数据传输方式:单工(单向传输数据),半双工(非同时双向传输),全双工(同时,双向传输) 1. 根据通信方式的不同又分为同步通讯和异步通讯. 同步通讯:所有设备都使用同一 ...

  2. eclipse 添加resources 目录

    java项目需要一些配置,配置放置目录如:/src/main/resources; 如果没有这个文件夹,需要右键项目>new>source folder > Folder name ...

  3. PC-CSS-多浏览器支持HTML5

    非IE:article, section, aside, hgroup, nav, header, footer, figure, figcaption {display: block;}IE:< ...

  4. JMeter录制脚本

    Jmeter 是一个非常流行的性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:很它的优点也有很多: l 开源,他是一款开源的免费软件,使用它你 ...

  5. [RxJS] Resubscribing to a Stream with Repeat

    When you complete a stream, there’s no way to restart it, you must resubscribe. This lesson shows ho ...

  6. JavaScript总结(二) 系统分析

    学习Javascript的时候.遇到了一个问题. 看了牛腩的视频,感觉讲的太简单和基础,像认识一位新朋友.但仅有一面之缘就结束了. 再看姜浩的视频.又看得迷迷糊糊,让我找到了当初看两位台湾专家讲VB. ...

  7. [小技巧] 把虚拟机中的Linux系统安装到U盘中

    出于各种需求,很多用户可能经常会在Windows系统中安装虚拟机,然后在虚拟机中安装Linux系统.使用虚拟机的优点是可以同时使用多个系统,而缺点也是显然的,也就是程序运行效率较差.   而实际上,L ...

  8. Ubuntu 10.04下安装Opengl glx

    1.安装OpenGL Library sudo apt-get install build-essential 2. 安装OpenGL Utilities sudo apt-get install l ...

  9. IP转发和子网路由

    IP地址的分类 在TCP/IP协议中,协议栈分为4层.从上到下依次是应用层.运输层.网络层.网络接口层. IP协议就工作在网络层.IP协议将纷繁复杂的物理层协议屏蔽掉,对上层提供统一的描述和管理服务. ...

  10. Python进阶之路---1.4python数据类型-数字

    python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print     print('hello,python')   1.1pyt ...