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 ...
 
随机推荐
- pyglet: a cross-platform windowing and multimedia
			
pyglet pyglet: a cross-platform windowing and multimedia library for Python.
 - pyqt小例子 音乐盒
			
源代码1: # -*- coding: utf-8 -*- import sys,time,os import ctypes from PyQt4 import QtCore, QtGui,Qt fr ...
 - python  turtle,random,math
			
# List imports here: import turtle import random import math # List constants here (NO MAGIC NUMBERS ...
 - spark1.3的部署
			
1.下载源码,根据自己的环境编译,我这里下载的是spark1.3版本 本人采用sbt编译, SPARK_HADOOP_VERSION=2.5.2 SPARK_YARN=ture sbt/sbt ass ...
 - Laravel-表单篇-零散信息
			
1.asset('path'):用于引入静态文件,包括css.js.img 2.分页,调用模型的paginate(每页显示的行数)方法, 如$student = Student::paginate(2 ...
 - mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
			
权限问题,授权 给 root 全部sql 权限 mysql> grant all privileges on *.* to root@"%" identified by & ...
 - JMeter基础概念
			
JMeter 介绍:一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工具包含 ...
 - C#调用Java代码
			
c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...
 - <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数
			
说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...
 - Server.HTMLEncode用法
			
Server.HTMLEncode用法!! Server.HTMLEncode HTMLEncode 一.HTMLEncode 方法对指定的字符串应用 HTML 编码. 语法 Server.HTMLE ...