博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HDU6196]happy happy happy
阅读量:6968 次
发布时间:2019-06-27

本文共 2229 字,大约阅读时间需要 7 分钟。

题目大意:

  有一个长度为n的数列,A和B两个人轮流从两端取数,B先取,A想使分数严格小于B且尽量接近B,问两人分数之差最小是多少。

思路:

  折半搜索,先预处理出长度为part的最大差最小差,再预处理出后面一段能取到的不同差值,然后dfs,当范围等于part时,就在数组中二分查找一下。

1 #include
2 #include
3 #include
4 #include
5 inline int getint() { 6 register char ch; 7 while(!isdigit(ch=getchar())); 8 register int x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');10 return x;11 }12 const int inf=0x7fffffff,_inf=-0x80000000;13 const int N=91;14 int a[N];15 int max[N][N],min[N][N],ans,n,part;16 inline void init() {17 ans=_inf;18 for(register int i=0;i<=n;i++) {19 for(register int j=0;j<=n;j++) {20 max[i][j]=_inf;21 min[i][j]=inf;22 }23 }24 for(register int i=1;i<=n;i++) {25 max[i][i-1]=min[i][i-1]=0;26 }27 for(register int i=n;i;i--) {28 for(register int j=i;j<=n;j++) {29 int l=i,r=j;30 int tmp=(a[l]>=a[r])?a[l++]:a[r--];31 max[i][j]=std::max(a[l]+max[l+1][r],a[r]+max[l][r-1])-tmp;32 min[i][j]=std::min(a[l]+min[l+1][r],a[r]+min[l][r-1])-tmp;33 }34 }35 }36 std::vector
v[N];37 __gnu_cxx::hash_set
s;38 void initPart2() {39 part=std::min(1,n/4);40 for(int i=1;i<=n+1-part*2;i++) {41 s.clear();42 v[i].clear();43 for(int j=0;j<1<
=a[r])?a[l++]:a[r--];47 tmp+=(!(j&(1<
::iterator it=std::lower_bound(v[l].begin(),v[l].end(),-dif);60 if(it==v[l].begin()&&*it==-dif) return;61 if(it==v[l].end()||*it==-dif) it--;62 if(dif+*it<0) ans=std::max(ans,dif+*it);63 return;64 }65 if(dif+min[l][r]>=0) return;66 if(dif+max[l][r]<=ans) return;67 if(dif+max[l][r]<0) {68 ans=std::max(ans,dif+max[l][r]);69 return;70 }71 int tmp=(a[l]>=a[r])?a[l++]:a[r--];72 dfs(l+1,r,dif+a[l]-tmp);73 dfs(l,r-1,dif+a[r]-tmp);74 }75 int main() {76 getint();77 while(~scanf("%d",&n)) {78 for(register int i=1;i<=n;i++) {79 a[i]=getint();80 }81 init();82 initPart2();83 dfs(1,n,0);84 if(ans!=_inf) {85 printf("%d\n",-ans);86 } else {87 puts("The child will be unhappy...");88 }89 }90 return 0;91 }

这段代码在SimpleOJ上交比暴力还慢。

转载于:https://www.cnblogs.com/skylee03/p/7541867.html

你可能感兴趣的文章
网站服务器设置禁PING的方法步骤
查看>>
Linux基础命令---lpstat查看打印机状态
查看>>
新年福利 | 架构的“一小步”,业务的一大步
查看>>
Confluence 6 升级中的一些常见问题
查看>>
不可小看的数值类型—Python基础前传(5)
查看>>
集群中节点挂载数据盘的几种方式
查看>>
工作日志——基于k8s搭建spark集群
查看>>
3. 爬虫框架Clawler 爬取优酷电影名
查看>>
记维护旧项目遇到的问题
查看>>
Node v10.15.3 (LTS) 发布,服务器端的 JavaScript 运行环境
查看>>
如何让你的网站拥有网盘功能, 一分钟搞定
查看>>
行李箱品牌“July”完成数百万元天使轮融资
查看>>
group by,where,having之间的区别和用法
查看>>
HashMap VS Hashtable
查看>>
MySQL-To-JSON 的 Kafka 生产者
查看>>
[网络篇]ESP8266-SDK教程(五)之SmartConfig、Airkiss等多种配网方式
查看>>
C4C销售订单中业务伙伴的自动决定功能Partner determination procedure
查看>>
关于Java序列化你不知道的事
查看>>
使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。...
查看>>
项目管理助力组织赢在VUCA时代
查看>>