预计分数: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的更多相关文章

  1. qbzt day6 下午 模拟赛

    我太菜了 T2 给定一张有向图,每个点有点权.试找到一条路径,使得该路径上的点权最 大值减去点权最小值最大,问这个差最大是多少.   话说这个题第一个想到的思路是tarjan缩点+拓扑排序来着... ...

  2. 济南day3

    连续几天都有点炸 预计的分拿不到,调整好心态,考试的时候多想一下,think twice,code once 唉,什么情况啊 题解链接 0+0+0 T1读错题输出反了 n*m%2判断是否==1 T2 ...

  3. upc组队赛18 THE WORLD【时间模拟】

    THE WORLD 题目链接 题目描述 The World can indicate world travel, particularly on a large scale. You mau be l ...

  4. 蓝桥杯练习 Day6 题解

    蓝桥杯练习 Day6 题解 A 题意:给你一个等式ax+by = c,问你x,y是否有整数解. 思路:gcd(a,b) = t,如果方程有解,那么\((a/t)*x + (b/t)*y = c/t\) ...

  5. 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)

    补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...

  6. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  7. ZOJ Monthly, June 2014 月赛BCDEFGH题题解

    比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...

  8. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  9. 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...

随机推荐

  1. 一 Balancer regionCountCost 权重。

    原文如下地址 : http://www.cnblogs.com/cenyuhai/p/3650943.html 看源码很久了,终于开始动手写博客了,为什么是先写负载均衡呢,因为一个室友入职新公司了,然 ...

  2. HDU 5371 Hotaru's problem Manacher+尺取法

    题意:给你一个序列,求最长的两段回文子串,要求他们共用中间的一半. 思路:利用Manacher求出p[i]表示的当前位置的最长回文串长度,然后把每一个长度大于等于2的回文串的左区间和右区间分别放到两个 ...

  3. 为什么选择Sqoop1

    1)大部分企业还在使用sqoop1版本 2)sqoop1能满足公司的基本需求 3)sqoop2 功能还不是很成熟和完善 4)sqoop只是一个工具而已,相对比较简单

  4. hashCode 和 equals 方法

    hashCode 和 equals 方法 hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法. 使用hashCode()和 ...

  5. matlab中plot画图参数的设置

    原文链接:http://blog.sciencenet.cn/blog-281551-573856.html 一.Matlab绘图中用到的直线属性包括: (1)LineStyle:线形 (2)Line ...

  6. blkid---对系统块设备信息查询

    在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...

  7. [Python] Format Strings in Python

    Single quotes and double quotes can both be used to declare strings in Python. You can even use trip ...

  8. iOS 开发之IPad的设计与实现

    // // main.m // 6-ipad // #import <Foundation/Foundation.h> #import "Ipad.h" int mai ...

  9. hdu4253 Two Famous Companies --- 二分+MST

    给n个点.m条边的图.每条边要么属于a公司,要么属于b公司.要求一颗最小生成树,条件是当中属于a公司的边数为k. 这题做法非常巧妙. 要求最小生成树,但有一定限制,搜索.贪心显然都不正确. 要是能找到 ...

  10. java正則表達式总结

    近期用到的正則表達式 因为近期在做一个android的新闻client.多次用到了正則表達式.因此总结下. 1.使用正則表達式获取Rss资源内的文章内容的图片url 由于在每条新闻浏览的listVie ...