Day6下午题解1
预计分数:100+?+30=130+?
实际分数:100+25+30=155
T1
https://www.luogu.org/problem/show?pid=T15920
DP裸题,用dp[i][0]表示到达i,第i个位置不选,dp[i][1]表示到达i,第i个选的最大值
对于每一个询问,只有最高位为1的时候是有限制的,我们用now维护
转移也比较好写
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define LL long long
using namespace std;
const LL MAXN=1e6+;
const LL INF=0x7fffff;
inline LL read()
{
char c=getchar();LL flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
LL n,m;
char s[MAXN];
LL a[MAXN];
LL maxpos;//最高位的位置
LL dp[MAXN][];
bool flag=;
LL fastpow(LL a,LL p)
{
LL base=;
while(p)
{
if(p&) base=base*a;
a=a*a;
p>>=;
}
return base;
}
int main()
{
// freopen("maximum.in","r",stdin);
// freopen("maximum.out","w",stdout);
n=read();
if(n<=)
{
for(LL i=;i<=n;i++) a[i]=read();
scanf("%s",s);
LL ls=strlen(s);
for(LL i=;i<=ls-;i++)
if(s[i]=='')
m+=fastpow(,i);
LL ans=;
for(LL i=;i<=m;i++)
{
LL p=i,now=;
for(LL j=;j<=;j++)
if(p&(<<j))
now+=a[j+];
// cout<<now<<endl;
ans=max(ans,now);
}
printf("%lld",ans);
}
else
{
for(LL i=;i<n;i++) a[i]=read();
for(LL i=;i<n;i++)
{
dp[i][]=max(dp[i-][],dp[i-][]);
dp[i][]=max(dp[i][],dp[i][]+a[i]);
}
//for(LL i=0;i<n;i++) printf("%d ",dp[i][0]);printf("\n");
//for(LL i=0;i<n;i++) printf("%d ",dp[i][1]);printf("\n");
scanf("%s",s);
LL ls=strlen(s);
LL now=;// 已经选了的限制位
LL ans=;
for(LL i=ls-;i>=;i--)
{
if(s[i]=='')//最高位
{
flag=;
ans=max(ans,max( dp[i-][] ,dp[i-][]) +now);
if(a[i]>) now+=a[i];
}
else if(flag==) ans=max(ans,max(dp[i][],dp[i][]));
}
ans=max(ans,now);
printf("%lld",ans);
}
return ;
} /* 4
-1 1 2 0
0010 //2
*/
T2
考场上推出一个很逗比的结论,
首先二分一个值,对于每一个点,如果要修改的话,那么now+val,now,now-val这三个值一定有一个是最优的。
这个用dp应该能水60分。。。
不过没时间写了,打了25的暴力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define LL long long
using namespace std;
const LL MAXN=1e6+;
const LL INF=0x7fffff;
inline LL read()
{
char c=getchar();LL flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
LL n,k;
LL ans=,maxval=-INF,minval=INF;
LL a[MAXN];
LL dfs(LL now,LL val,LL spend)
{
if(spend>k) return ;
if(now==n)
{
LL now=-INF;
for(LL i=;i<=n-;i++)
now=max(now,abs(a[i]-a[i+]));
if(now<=val) return ;
return ;
}
if(abs(a[now+]-a[now])>val)
{
LL pre=a[now+];
a[now+]=a[now]+val;
if( dfs(now+,val,spend+) ) return ;
a[now+]=a[now];
if( dfs(now+,val,spend+) ) return ;
a[now+]=a[now]-val;
if( dfs(now+,val,spend+) ) return ;
a[now+]=pre;
}
if(dfs(now+,val,spend)) return ;
return ;
}
LL check(LL val)//最小值
{
LL now=,spend=;
if(abs(a[]-a[])>val)
{
if(k==) return ;
LL pre=a[];
a[]=a[]+val; if( dfs(now+,val,spend+) ) return ;
a[]=a[]; if( dfs(now+,val,spend+) ) return ;
a[]=a[]-val; if( dfs(now+,val,spend+) ) return ;
a[]=pre;
if( dfs(now,val,spend) ) return ;
}
else if( dfs(now+,val,) ) return ;
return ;
}
int main()
{
// freopen("minimum.in","r",stdin);
// freopen("minimum.out","w",stdout);
n=read();k=read();
if(k>=n-)
{
printf("");return ;
}
for(LL i=;i<=n;i++) a[i]=read(),maxval=max(a[i],maxval),minval=min(minval,a[i]);
LL l=,r=maxval-minval;
LL ans=;
while(l<=r)
{
LL mid=l+r>>;
if(check(mid)) ans=mid,r=mid-;
else l=mid+;
}
printf("%lld",ans);
return ;
} /* 5 2
1 2 1 2 1
//0 5 1
1 3 1 2 1
//1 2 0
1 4
//3 4 1
1 3 5 7
//2 4 3
1 3 5 7
//0 4 2
1 3 5 7
//2
*/
T3
分块瞎搞。。
Day6下午题解1的更多相关文章
- qbzt day6 下午 模拟赛
我太菜了 T2 给定一张有向图,每个点有点权.试找到一条路径,使得该路径上的点权最 大值减去点权最小值最大,问这个差最大是多少. 话说这个题第一个想到的思路是tarjan缩点+拓扑排序来着... ...
- 济南day3
连续几天都有点炸 预计的分拿不到,调整好心态,考试的时候多想一下,think twice,code once 唉,什么情况啊 题解链接 0+0+0 T1读错题输出反了 n*m%2判断是否==1 T2 ...
- upc组队赛18 THE WORLD【时间模拟】
THE WORLD 题目链接 题目描述 The World can indicate world travel, particularly on a large scale. You mau be l ...
- 蓝桥杯练习 Day6 题解
蓝桥杯练习 Day6 题解 A 题意:给你一个等式ax+by = c,问你x,y是否有整数解. 思路:gcd(a,b) = t,如果方程有解,那么\((a/t)*x + (b/t)*y = c/t\) ...
- 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)
补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...
- 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...
- ZOJ Monthly, June 2014 月赛BCDEFGH题题解
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...
- Noip 2014酱油记+简要题解
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...
随机推荐
- 新一代企业即时通信系统 -- 傲瑞通(OrayTalk)
傲瑞通(OrayTalk)是我们为企业专门打造的新一代企业即时通讯平台,功能强大丰富.像组织结构.文字/语音/视频会话.文件传送.远程协助.消息记录等功能都有,而且留有接口可与企业遗留系统进行集成. ...
- 怎样使Dialog像Activity一样随心所欲的使用?
怎样使Dialog像Activity一样随心所欲的使用? android中的Dialog像是寄生在Activity中.在弹出Dialog时.因受到系统风格定义,导致Dialog怎么也不能如意,那么今天 ...
- IDEA中如何设置自动导包
IDEA跟eclipse还是有一些差别,一些东西要自己去设置,但同时也还是有快捷键的方式来帮助我们 1.如何设置自动导包:如下图所示 点击FIle--->settings 其次还可以通过按快捷键 ...
- BZOJ 1503 treap
思路: treap (算是基本操作吧-..) 加减的操作数很少 就暴力好啦 每回判断一下最小的数是不是比M小 如果是 就删,继续判断 搞定. //By SiriusRen #include <c ...
- Python(四) 分支、循环、条件与枚举
一.什么是表达式 表达式(Expression)是运算符(operator)和操作数(operand)所构成的序列 二.表达式的优先级 三.表达式优先级练习 优先级同级 从左往右计算 1 or 2 a ...
- Ubuntu18.04上使用LLDB调试Chromium Android C++代码。
###动机###Chromium Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译 ...
- sublime 编辑器汉化
一.下载Sublime编辑器 官网下载地址:http://www.sublimetext.com/3 二.下载汉化包 汉化包下载地址:http://files.cnblogs.com/akwwl/su ...
- selenium无法定位元素问题
在用自动化测试工具selenium完成下载任务时,经常会遇到定位不到元素的情况,总结如下: 1.frame/iframe原因定位不到元素: 这个是最常见的原因,首先要理解下frame的实质,frame ...
- javaScript 预编译过程浅尝
javaScript 预编译过程 1.创建AO对象(Activation Object) AO{ a: } 2.找形参和变量声明,将变量和形参作为AO属性名,值为undefined AO{ a:und ...
- QNX与Linux两家未来有望独霸车载电子操作系统
车载电子操作系统是汽车智能化的核心,能够有效分配车机的硬件资源,对车内各种任务功能进行协同管理,并控制各项任务优先级别.常见的车载电子操作系统有:QNX.Linux(Android,AaliOS).W ...