UVALive 6190 Beautiful Spacing (2012 Tokyo regional)
题意是给一个文本排版,求在满足题目所给要求的条件下,最长连续空格最小是多少.
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)的更多相关文章
- uva live 6190 Beautiful Spacing (二分法+dp试 基于优化的独特性质)
I - Beautiful Spacing Time Limit:8000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
- 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 ...
- 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 ...
- bzoj4692: Beautiful Spacing
先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...
- [Regionals 2012 :: Asia - Tokyo ]
链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=56 ...
- HDU 4465 - Candy(概率与数学优化)
2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了 比较水的概率题 #include <stdio. ...
- 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 ...
- 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 ...
随机推荐
- 关于bootstrap--网格系统
1. 2.偏移列(col-md-offset-*):为了在大屏幕显示器上使用偏移,请使用 .col-md-offset-* 类.这些类会把一个列的左外边距(margin)增加 * 列,其中 * 范围是 ...
- vue + vue-resource 跨域访问
使用vue + vue-resource进行数据提交,后台使用RESTful API的方式存取数据,搞了一天,终于把后台搞好了.进行联合调试时,数据不能提交,报403错误: XMLHttpReques ...
- 用Scertify Professional实现代码审查
用Scertify Professional实现代码审查 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Scertify Professional是一 ...
- 由mysql数据库基础上的php程序实现单词的查询、删除、更改和查询
我做了一个php程序,将表单数据添加到数据库,借用mysql扩展库函数实现对mysql数据库的操作,能够实现添加单词.删除单词.更新和查询单词.运行环境是普通的mysql数据库和php.Apache服 ...
- fopen(),fclose() 打开/关闭文件
打开/关闭/刷新流 1. fopen() 打开流 功能: 1)fopen()打开由 path指定的一个文件. 2)fdopen()获取一个先有的文件描述符,并使一个标准的I/O流与该描述相结合.此函数 ...
- Samba的ADS域模式和RPC域模式
对于Samba服务器,有两种域安全模式,加入到Windows 2000或者Windows 2003域控制器(DC‘s)控制的域中: RPC 模式 RPC(远程过程调用)模式的域成员是"NT4 ...
- java 静态文件使用注解
spring框架为我们代码的编写带来了极大的便利,特别是注解的使用.但是有个问题,当我们在静态文件中使用注解的时候,这个时候就会报错了.如以下代码: @Autowired private UserSe ...
- Js 时间间隔计算(间隔天数)
function GetDateDiff(startDate,endDate) { var startTime = new Date(Date.parse(startDate.replac ...
- zsh-替换掉黑白的控制台
官方地址:里面有详细的安装指南 http://ohmyz.sh/
- web worker使用
使用postMessage()方法传递信息.来自Worker的数据保存在event.data中.通过message和error事件与页面通信. <script> var data = [4 ...