【牛客 - 317C】小a与星际探索(背包dp 或 线性基)

题干:

小a正在玩一款星际探索游戏,小a需要驾驶着飞船从11号星球出发前往nn号星球。其中每个星球有一个能量指数pp。星球ii能到达星球jj当且仅当pi>pjpi>pj。
同时小a的飞船还有一个耐久度tt,初始时为11号点的能量指数,若小a前往星球jj,那么飞船的耐久度会变为t⊕pjt⊕pj(即tt异或pjpj,关于其定义请自行百度)
小a想知道到达nn号星球时耐久度最大为多少

注意:对于每个位置来说,从它出发可以到达的位置仅与两者的pp有关,与下标无关

输入描述:

第一行一个整数nn,表示星球数
接下来一行有nn个整数,第ii个整数表示pipi

输出描述:

一个整数表示到达nn号星球时最大的耐久度
若不能到达nn号星球或到达时的最大耐久度为00则输出−1−1

示例1

输入

复制

3
457 456 23

输出

复制

478

说明

小a有两种方法到达33号星球
第一种:1→2→31→2→3,最终耐久度为457⊕456⊕23=22457⊕456⊕23=22
第二种:1→31→3,最终耐久度为457⊕23=478457⊕23=478

示例2

输入

复制

4
2 4 4 2

输出

复制

-1

示例3

输入

复制

5
234 233 123 2333 23

输出

复制

253

备注:

1⩽n,∀pi⩽3000

解题报告:

   这题做法比较多样,比较好想的就是当成布尔背包去解,因为告诉你了最大值是3000,那就一个bool类型的dp数组判断能否得到就行了。因为异或不具有单调性(即正数异或一个正数得到的数不一定更大),,所以直接背包取max的做法显然是错误的。。还有就是这题可以直接类似spfa去求解,但是这题告诉你了顺序是从大到小走,所以可以直接排序然后直接判断就行了。具体解法就是排序然后把值位于a[1]  a[n]之间的都加到b数组中,然后对b数组直接背包就行了,因为这样背包背出来的dp值如果是1,代表一定能凑出来,如果是0,代表一定凑不出来。(其实这样解的话就不需要排序了,,但是标程的解法是排序的。)

   第二种方法是线性基,刚刚学会,,感觉超级好用。。代码附上、、

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int N = 3000 + 5;
ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f;
}
int a[N],f[1<<12],b[N];
int main()
{int n = read();for(int i = 1;i <= n;++i) a[i] = read();int js = 0;int mx = a[1],mn = a[n];if(mx <= mn) {puts("-1");return 0;}f[mn ^ mx] = 1;f[0] = 1;for(int i = 1;i <= n;++i) {if(a[i] > mn && a[i] < mx) {b[++js] = a[i];}}int END = 1 << 12;for(int i = 1;i <= js;++i) {for(int j = END;j >= 0;--j) {f[j] = f[j ^ b[i]] | f[j];}}int ans = 0;for(int i = END;i >= 0;--i) {if(f[i] == 1) {ans = i;break;}}if(ans == 0) puts("-1");else printf("%d",ans);return 0;
}

 线性基解法1:(这个query其实并不是很标准,,这题貌似是数据问题刚好放过去了。、、)

#include <bits/stdc++.h>
#define lld I64d
using namespace std ;
const int Bit = 12 ;
int N , A[3005] , Base[Bit+5] ;
inline void Insert( int Num ) {for( int i = Bit ; --i >= 0 ; )if( 1 << i & Num )if( not Base[i] ) {Base[i] = Num ;break ;}else Num ^= Base[i] ;
}
inline int Query( int Num ) {for( int i = Bit ; --i >= 0 ; )Num = max( Num , Num ^ Base[i] ) ;return Num ;
}
int main() {cin>>N;for(int i = 1 ; i <= N ; i++) cin >> A[i] ;if( A[1] <= A[N] ) {printf( "-1\n" ) ;return 0;}for(int i = 2 ; ++i < N ; )if( A[1] > A[i] and A[i] > A[N] )Insert( A[i] ) ;printf( "%d\n" , Query( A[1] ^ A[N] ) ) ;return 0;
}

线性基解法2:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
int n,a[MAX];
vector<int> vv;
bool ok(int i) {if(a[i] > a[n] && a[i] < a[1]) return 1;else return 0;
}
int main() {cin>>n;for(int i = 1; i<=n; i++) cin>>a[i];if(a[1] <= a[n]) {puts("-1");return 0 ;}for(int i = 2; i<=n-1; i++) {if(ok(i)) vv.pb(a[i]);}int up = vv.size(),ans=0;ans = a[1]^a[n];if(up) {for(int i = 14,k=0; i>=0; i--) {for(int j = k; j<up; j++) {if((1<<i) & vv[j]) {swap(vv[j],vv[k]);break;}}if((1<<i) & vv[k]) {for(int j = k+1; j<up; j++) {if((1<<i) & vv[j]) vv[j] ^=vv[k];}k++;}}for(int i = 14,k=0; i>=0; i--) {if((1<<i) & vv[k]) ans = max(ans,ans^ vv[k]),k++;//或者 if (!(ans >> i & 1)) ans ^= vv[k];}}if(ans == 0) ans=-1;printf("%d\n",ans);return 0 ;
}

总结:

   其实最后求解的时候不能直接取max我感觉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机及数控编程仿真软件exsl-win7,数控编程实验.doc

文档介绍&#xff1a;现代制造技术综合实验中心数控铣编程与仿真实验指导书1.实验目的:(1)通过上机实验巩固课堂所讲述的数控铣指令,掌握数控铣手工编程方法。(2)掌握EXSL-WIN7软件的编程及仿真等主要功能。2.实验设备或软件:计算机及数控编程仿真软件EXSL-WIN7。3.实验原理:根…

三菱socket通信实例_三菱自动化产品相关知识整理汇总

先从应用最广泛的PLC产品来说下&#xff1a;小型机&#xff1a;FX3S、FX3G、FX3U、FX5U 中型机&#xff1a;L系列大型机&#xff1a;Q系列、R系列Q是比较老的产品&#xff0c;也是现在大型机里面应用比较普遍的产品&#xff0c;在Q之后开发出性价比比较高的产品L系列和性能更高…

【牛客 - 317B】小a与204(贪心,构造,水题)

题干&#xff1a; 小a非常喜欢204204这个数字&#xff0c;因为′a′′k′204′a′′k′204。 现在他有一个长度为nn的序列&#xff0c;其中只含有2,0,42,0,4这三种数字 设aiai为序列中第ii个数&#xff0c;你需要重新排列这个数列&#xff0c;使得∑ni1(ai−ai−1)2∑i1n(ai−…

英语人机考试计算机算分吗,英语人机对话考试技巧

1英语 人机对话考试技巧目前要在英语口语人机对话中获得好的成绩&#xff0c;除了了解测试的特点之外&#xff0c;还需掌握一定的技巧、这对提高英语口语人机对话成绩将起到事半功倍的作用。接下来小编告诉你英语人机对话考试技巧。调整心态&#xff0c;临场莫慌听力不同于其他…

玛纽尔扫地机器人怎样_扫地机器人哪个牌子好?满足日常清洁需求才值得推荐...

随着科技的发展,越来越多的家庭入手扫地机器人来代替日常打扫,而扫地机器人以其高智能化、自动化和便捷的清洁方式也获得了大部分家庭的喜爱。从市面上出售的扫地机器人来看,就清洁方面足以满足大部分家庭的需求,但是更进一步的定位巡航技术、扫拖一体功能以及强劲的续航保证,却…

【牛客 - 317D】小a与黄金街道(数论,tricks)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/317/D 来源&#xff1a;牛客网 小a和小b来到了一条布满了黄金的街道上。它们想要带几块黄金回去&#xff0c;然而这里的城管担心他们拿走的太多&#xff0c;于是要求小a和小b通过做一个游戏来决定最…

ios 旋转屏幕试图切换_iOS增强现实应用(AR)设计指南(上)

- 这是 交互设计 的第 4篇文章 -- 读完本文&#xff0c;大概需要您 10分钟的时间 -本文为《iOS人机交互指南》的一部分&#xff0c;由黄方闻翻译&#xff0c;转载请注明出处。受公众号限制&#xff0c;无法跳转第三方网页为了更好的体验&#xff0c;欢迎访问http://hfw.design阅…

计算机应用类专业综合冲刺卷,2009年计算机应用类专业综合知识模拟试卷.doc

2009年计算机应用类专业综合知识模拟试卷2009年计算机应用类专业综合知识模拟试卷一、单选题(本大题共15小题&#xff0c;每小题2分&#xff0c;共30分&#xff0c;在每小题给出的四个选项中&#xff0c;只有一项是符合题目要求的)1、采用32*32点阵字模输出1000个汉字所占的空间…

【牛客 - 317E】小a的轰炸游戏(差分,前缀和)

题干&#xff1a; 小a正在玩一款即时战略游戏&#xff0c;现在他要用航空母舰对敌方阵地进行轰炸 地方阵地可以看做是nmnm的矩形 航空母舰总共会派出qq架飞机。 飞机有两种&#xff0c;第一种飞机会轰炸以(xi,yi)(xi,yi)为中心&#xff0c;对角线长为lili的正菱形(也就是两条对…

认真测试直播软件,直播这么火,你知道怎么测试直播软件吗?

作为互联网的新生力量&#xff0c;一种新型的社交互动方式&#xff0c;直播软件快速在互联网行业占有一席之地。市场上对于直播软件的开发应用也越来越多&#xff0c;直播软件的框架&#xff1f;直播软件的原理&#xff1f;直播软件的功能点&#xff1f;直播软件测试关注点&…

csm和uefi_关于CSM和UEFI你要知道的一些事

最近碰到了一件小事,让我觉得关于这个还是专门用一期说一下比较好。 一个朋友最近要升级机器,老机器是A8 5600+8GB DDR3,还有一张我送他的GTX660.他的预算3K左右,决定先不买显卡,花了2600左右,买了一张技嘉的B360M DS3H+i5 8400+16GB DDR4内存,SSD他有,电源准备用老的。…

计算机辅助教学研究现状,计算机辅助教学应用现状及对策研究

计算机辅助教学应用现状及对策研究 (8页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分计算机辅助教学应用现状及对策研究摘要&#xff1a;新形势下&#xff0c;计算机辅助教学迅速发展&…

【牛客 - 317F】小a的子序列(线性dp,tricks)

题干&#xff1a; 小a有一个长度为nn的序列&#xff0c;但是他忘了这个序列的样子&#xff0c;他只记得序列中的数大小在[1,V][1,V]内 你可以任意选择一些位置&#xff0c;并给它们赋值来组成一段子序列&#xff0c;需要满足序列中的数严格递增 一段子序列的“萌值”定义为序…

hostapd 进程启动不了_项目管理|项目启动会实操要点,项目经理掌权的关键

项目启动会就像古代的誓师大会&#xff0c;把大家集中到一起&#xff0c;告诉大家我们要去干什么&#xff0c;这个事情如何重要、皇帝如何重视&#xff0c;干成以后大家升官加爵、富贵少不了大家的等等&#xff0c;大会目的在于调动起大家干活的热情&#xff0c;然后顺利地推进…

【牛客 - 317G】小a的排列(模拟,构造)

题干&#xff1a; 小a有一个长度为nn的排列。定义一段区间是"萌"的&#xff0c;当且仅当把区间中各个数排序后相邻元素的差为11 现在他想知道包含数x,yx,y的长度最小的"萌"区间的左右端点 也就是说&#xff0c;我们需要找到长度最小的区间[l,r][l,r]&a…

怎么看联想计算机的ip,如何查看本机ip

ip地址是我们连上互联网的凭证&#xff0c;每台能连上互联网的电脑都会分配有一个ip地址。每台电脑的IP地址都不唯一&#xff0c;并且从我们主机的IP地址上可以看出我们电脑连上互联网的所在位置与地区&#xff0c;就像我们生活中的门牌号码一样。很多朋友还不知道本机ip怎么查…

当前元素_前端系列——获取页面中的DOM元素

这里就聊一下获取页面中DOM元素最基本的两种方法&#xff1a;document.getElementById.在整个页面中通过元素的Id属性值来获取到这个元素对象&#xff0c;getElementById是获取元素的方法&#xff0c;而document是获取元素的范围&#xff0c;我们也将此范围称为“上下文”。注意…

东华大学计算机年薪,东华大学公布应届毕业生薪酬:本科生月薪中位数6637元...

岁末年初&#xff0c;国内多所名校陆续发布了2020届毕业生就业质量报告&#xff0c;各校毕业生的平均薪酬也随之公布。澎湃新闻(www.thepaper.cn)注意到&#xff0c;由教育部直属的新中国第一所纺织高等学府东华大学也于近日公布了本校毕业生的平均薪酬状况。1月4日&#xff0c…

【牛客 - 330C】Applese 走迷宫(bfs)

题干&#xff1a; 精通程序设计的 Applese 双写了一个游戏。 在这个游戏中&#xff0c;它被困在了一个 nmnm 的迷宫中&#xff0c;它想要逃出这个迷宫。 在迷宫中&#xff0c;有一些方格是水池&#xff0c;只有当 Applese 处于水属性的时候才可以通过&#xff1b;有一些方格是岩…

怎么做蒙特卡洛计算npv_PowerBI非标准日历下的同比环比计算,你知道怎么做吗?...

​对于按照自然年月日来分析的业务数据&#xff0c;在PowerBI中可以轻松的使用时间智能函数来进行各种时间指标的计算&#xff0c;但如果不是按标准的日历&#xff0c;很多人就开始有点懵&#xff0c;不知道该如何计算了。比如有的公司的业务月份是从26号到下个月的25号&#x…