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 来,我们先来放松下,听听儿歌,一起“唱” ...
随机推荐
- 八款常用的 Python GUI 开发框架推荐
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好的选择,欢迎在评论区留言. Python 的 UI 开发工具 ...
- TortoiseSvn安装的时候,将svn的命令行工具单独隔离出来
https://stackoverflow.com/questions/2967176/where-is-svn-exe-in-my-machine The subversion program co ...
- centos7 安装好python3 yum报错
解决方法: 修改两个地方 vi /usr/bin/yum 将最前面的改为#! /usr/bin/python2 vi /usr/libexec/urlgrabber-ext-down #! /usr/ ...
- BZOJ 3196 线段树套平衡树
(代码无比丑陋) //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int ...
- 之前写的收集的一些c++代码片,算法排序,读文件,写日志,快速求积分等等
写日志: class LogFile { public: static LogFile &instance(); operator FILE *() const { return m_file ...
- ORA-01659: 无法分配超出 7 的 MINEXTENTS
plsql连接出错:ORA-01659: 无法分配超出 7 的 MINEXTENTS (在表空间 PERFSTAT 中) 从 Oracle Database 10g Enterprise Editio ...
- cf 822B Crossword solving
B. Crossword solving time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Multi-process Architecture
For Developers > Design Documents > Multi-process Architecture This document describes Ch ...
- 织梦DedeCMS判断简略标题为空时则显示完整标题
使用织梦DedeCMS系统程序开发网站中,我们会遇到很多因网页版面设计限定的宽度,使文章标题需要进行字数限制,通常做法是在a标签中加入一个title属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...
- U-BOOT启动流程分析--start.s(二)
一.概述 u-boot的启动流程: 从文件层面上看主要流程是在两个文件中:cpu/arm920t/start.s,lib_arm/board.c, 先来分析start.s 在flash中执行的引 ...