BZOJ_1713_[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会_斜率优化
BZOJ_1713_[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会_斜率优化
Description
Input
第1行输入N,之后N行输入Ai,之后N行输入Bi.
Output
输出最大收益.
Sample Input
1
1
5
5
1
1
INPUT DETAILS:
There are 6 cows: 3 accordionists and 3 banjoists. The accordionists have
talent levels (1, 1, 5), and the banjoists have talent levels (5, 1, 1).
Sample Output
HINT
手风琴手3和班卓琴手1搭配,创造收益25美元.手风琴手1和手风琴手2喝酒用了4美元.同样班卓琴手2和班卓琴手3用了4美元.最后收益为25 -4-4=17美元
设F[i][j]表示手风琴手匹配到第i个,班卓琴手匹配到第j个的最大收益。
F[i][j]=F[k][l]+A[i]*B[j]-(sa[i-1]-sa[k])^2-(sb[j-1]-sb[l])^2。
因为A[i]*B[j]一定是正的,所以选的越多越好。
转移只有两个是有用的,F[i][j]从F[i-1][k]和F[k][j-1]转移。
斜率优化即可。注意L和R都要用数组来保存,Q也要开成二维的。
两个队列分别存i和j。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef double f2;
typedef long long ll;
#define N 1050
#define eps 1e-6
int a[N],b[N],n,l1[N],r1[N],l2[N],r2[N];
ll sa[N],sb[N],ans,f[N][N];
f2 gK(ll x,ll y,ll z,ll w) {
if(z==x) return w>y?1e10:-1e10;
return (1.0*w-y)/(z-x);
}
struct Point {
ll x,y;
int k;
}Q1[N][N],Q2[N][N];
f2 Slp(const Point &a,const Point &b) {
if(a.x==b.x) return b.y>a.y?1e10:-1e10;
return 1.0*(b.y-a.y)/(b.x-a.x);
}
#define X1(k) (sb[k])
#define Y1(k,i) (f[i-1][k]-sb[k]*sb[k])
#define X2(k) (sa[k])
#define Y2(k,j) (f[k][j-1]-sa[k]*sa[k])
int main() {
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++) scanf("%d",&a[i]),sa[i]=sa[i-1]+a[i];
for(i=1;i<=n;i++) scanf("%d",&b[i]),sb[i]=sb[i-1]+b[i];
ans=-1ll<<60;
for(i=1;i<=n;i++) {
for(j=1;j<=n;j++) {
f[i][j]=a[i]*b[j]-sa[i-1]*sa[i-1]-sb[j-1]*sb[j-1];
//
while(l1[i]<r1[i]-1&&Slp(Q1[i][l1[i]],Q1[i][l1[i]+1])>-2*sb[j-1]) l1[i]++;
k=Q1[i][l1[i]].k;
if(l1[i]<r1[i]) f[i][j]=max(f[i][j],f[i-1][k]+a[i]*b[j]-(sb[j-1]-sb[k])*(sb[j-1]-sb[k]));
//
while(l2[j]<r2[j]-1&&Slp(Q2[j][l2[j]],Q2[j][l2[j]+1])>-2*sa[i-1]) l2[j]++;
k=Q2[j][l2[j]].k;
if(l2[j]<r2[j]) f[i][j]=max(f[i][j],f[k][j-1]+a[i]*b[j]-(sa[i-1]-sa[k])*(sa[i-1]-sa[k])); if(i>=2) {
Point tmp=(Point){sb[j],f[i-1][j]-sb[j]*sb[j],j};
while(l1[i]<r1[i]-1&&Slp(Q1[i][r1[i]-1],tmp)>Slp(Q1[i][r1[i]-2],Q1[i][r1[i]-1])) r1[i]--;
Q1[i][r1[i]++]=tmp;
}
if(j>=2) {
Point tmp=(Point){sa[i],f[i][j-1]-sa[i]*sa[i],i};
while(l2[j]<r2[j]-1&&Slp(Q2[j][r2[j]-1],tmp)>Slp(Q2[j][r2[j]-2],Q2[j][r2[j]-1])) r2[j]--;
Q2[j][r2[j]++]=tmp;
}
ans=max(ans,f[i][j]-(sa[n]-sa[i])*(sa[n]-sa[i])-(sb[n]-sb[j])*(sb[n]-sb[j]));
}
}
printf("%lld\n",ans);
}
BZOJ_1713_[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会_斜率优化的更多相关文章
- 【BZOJ1713】[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会 斜率优化
[BZOJ1713][Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会 Description Input 第1行输入N,之后N ...
- [USACO Special 2007 Chinese Competition]The Bovine Accordion and Banjo Orchestra
[原题描述以及提交地址]:http://acm.tongji.edu.cn/problem?pid=10011 [题目大意] 给定两个长度为N的序列,要给这两个序列的数连线.连线只能在两个序列之间进行 ...
- 1712: [Usaco2007 China]Summing Sums 加密
1712: [Usaco2007 China]Summing Sums 加密 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 338 Solved: 12 ...
- BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛 ...
- bzoj 1712: [Usaco2007 China]Summing Sums 加密
1712: [Usaco2007 China]Summing Sums 加密 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛的加密方法.由于她 ...
- BZOJ1712 : [Usaco2007 China]Summing Sums 加密
设$s[i]$为进行$i$次加密后所有奶牛数字的和,有$s[i]=(n-1)s[i-1]$. 设$c[i]$为某头固定的奶牛进行$i$次加密后的数字, 若$i$为奇数,有: \[c[i]=((1-n) ...
- 【bzoj1712】[Usaco2007 China]Summing Sums 加密 矩阵乘法
题目描述 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛的加密方法.由于她们并不是经验十足,她们的加密方法非常简单:第i只奶牛掌握着密码的第i个数字,起始的时候是Ci(0≤C ...
- [bzoj1704][Usaco2007 Mar]Face The Right Way 自动转身机_贪心
Face The Right Way 自动转身机 bzoj-1704 Usaco-2007 Mar 题目大意:不想描述题意系列++... ...题目链接 注释:略. 想法:我们直接枚举k,然后从左往右 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- elasticsearch入门使用(三) Query DSL
Elasticsearch Reference [6.2] » Query DSL 参考官方文档 :https://www.elastic.co/guide/en/elasticsearch/refe ...
- css3的一些新属性及部分用法
CSS3是CSS(层叠样式表)技术的升级版本,增加了很多新属性,我们在web开发中采用css3技术可以提高程序的性能以及用户体验.而且一般面试中会问到知道哪些新增加的属性,我们不可能将所有东西一一复述 ...
- 利用BURPSUITE检测CSRF漏洞
CSRF漏洞的手动判定:修改referer头或直接删除referer头,看在提交表单时,网站是否还是正常响应. 下面演示用Burpsuite对CSRF进行鉴定. 抓包. 成功修改密码完成漏洞的利用.
- php执行超时(nginx,linux环境)
与下面的参数有关 nginx: fastcgi_connect_timeout fastcgi_read_timeout fastcgi_send_timeout php-fpm:request_te ...
- [转]通俗易懂的php多线程解决方案
原文: https://www.w3cschool.cn/php/php-thread.html --------------------------------------------------- ...
- STL源代码分析--deque
一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却仅仅能向尾端成长.并且其 ...
- poj 2828 Buy Tickets 【线段树点更新】
题目:id=2828" target="_blank">poj 2828 Buy Tickets 题意:有n个人排队,每一个人有一个价值和要插的位置,然后当要插的位 ...
- [UnityUI]一些有趣的UI样例
1.环形进度条 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- 用JAVA编写浏览器内核之实现javascript的document对象与内置方法
原创文章.转载请注明. 阅读本文之前,您须要对浏览器怎样载入javascript有一定了解. 当然,对java与javascript本身也须要了解. 本文首先介绍浏览器载入并执行javascript的 ...
- TinyXML学习:TiXmlBase类
TiXmlBase: 作为整个TinyXML模型的基类,除了可以提供一些实用功能外,它几乎没有什么作用 TiXmlBase的友元类: friend class TiXmlNode; friend cl ...