背包DP 存在异或条件的状态转移问题
分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的
题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀
我们可以用dp[i][j]表示到达第i个位置,当前耐久度为j是否可行,那就可以根据走或不走两种情况来安排状态转移
也就是说能判断dp[i]j]能不能到达得看存不存在dp[i-1][j]或者dp[i-1][j^a[i].val](注意,两次异或同一数等于没有异或)
另外,排序会存在相等情况,但是题目说过只能到能级比它小的,所以得特判相等的情况
#include <bits/stdc++.h>
using namespace std;
const int inf=<<;
typedef long long ll;
const double pi=acos(-);
const int mod=;
const int maxn=;
bool dp[maxn][];//注意第二维不能够只开到3000
struct node{
int id,val;
}a[];
bool cmp(const node& a,const node& b){
return a.val>b.val;
}
int main(){
int n;scanf("%d",&n);
for(int i=;i<n;i++)scanf("%d",&a[i].val),a[i].id=i;
sort(a,a+n,cmp);
for(int i=,flag=;i<n;i++){
if(a[i].id==){
flag=;
dp[i][a[i].val]=;
continue;
}
if(flag) continue;
if(a[i].id==n-){
for(int j=;j>;j--){
dp[i][j]=dp[i-][j^a[i].val];
if(dp[i][j]){
cout<<j<<endl;
return ;
}
}
}
if(a[i].val==a[i-].val){
for(int j=;j>;j--){
dp[i][j]=dp[i-][j];
}
}
else {
for(int j=;j>;j--){
dp[i][j]=dp[i-][j]|dp[i-][j^a[i].val];
}
}
}
cout<<"-1\n";
return ;
}
背包DP 存在异或条件的状态转移问题的更多相关文章
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- 或与异或 [背包DP]
也许更好的阅读体验 \(\mathcal{Description}\) 给定\(n\)和长度为\(n\)的数组\(a\) 问从\(a\)中选取任意个数使得其 异或起来的值 等于 或起来的值 的方案数 ...
- 树形DP和状压DP和背包DP
树形DP和状压DP和背包DP 树形\(DP\)和状压\(DP\)虽然在\(NOIp\)中考的不多,但是仍然是一个比较常用的算法,因此学好这两个\(DP\)也是很重要的.而背包\(DP\)虽然以前考的次 ...
- 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...
- 算法复习——背包dp
1.01背包 二维递推式子: 代码: ;i<=n;i++) ;x--) ][x-w[i]]+c[i],f[i-][x]); ][x]; printf("%d",f[n][m] ...
- HDU 5119 Happy Matt Friends (背包DP + 滚动数组)
题目链接:HDU 5119 Problem Description Matt has N friends. They are playing a game together. Each of Matt ...
- 背包dp整理
01背包 动态规划是一种高效的算法.在数学和计算机科学中,是一种将复杂问题的分成多个简单的小问题思想 ---- 分而治之.因此我们使用动态规划的时候,原问题必须是重叠的子问题.运用动态规划设计的算法比 ...
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
- BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )
题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...
随机推荐
- 【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维
题意:定义高度为\(x\)的金字塔数列为周期为\(2x-2\)的无限数列.它的每一个周期都是形如\(1,2,...,x-1,x,x-1,...,2\)的形式.记高度为\(x\)的金字塔数列第\(i\) ...
- MySQL删除数据库时无响应解决办法
删除远程主机上MySQL中的一个数据库时,远程主机一直在响应,无法正常删除. 这个问题的解决办法如下:在远程主机上登录MySQL,执行show full processlist;观察state和inf ...
- html页面使用前端框架布局时,弹出子页面等情况若出现布局混乱,可能是回发导致
解决方法:需要带调用 弹框 那里 写一段return false防止回发
- 深度学习课程笔记(十二) Matrix Capsule
深度学习课程笔记(十二) Matrix Capsule with EM Routing 2018-02-02 21:21:09 Paper: https://openreview.net/pdf ...
- 解决Android Studio No cached version of org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.50 available for offline mode.
打开 file --> Settings... --> Build,Execution,Deployment下点击 Gradle 在Global Gradle settings 处 取消勾 ...
- Derek解读Bytom源码-Api Server接口服务
作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...
- myCat知识笔记
数据字典做成全局表(在各个分库中都有备份) ER表, 关联表都放在同一个分库上, 有利于数据关联查询 一致性hash ,/hash slot 主要为了解决分布式节点扩容时, 迁移数据的问题. mySq ...
- spring注解预览
从Java5.0开始,Java开始支持注解.Spring做为Java生态中的领军框架,从2.5版本后也开始支持注解.相比起之前使用xml来配置Spring框架,使用注解提供了更多的控制Spring框架 ...
- Ubuntu 14.04 安装 boost 1_57_0
参考: How to build boost 1_57_0 Ubuntu platform Ubuntu 14.04 安装 boost 1_57_0 $ sudo mkdir /opt/downloa ...
- perl hash array 嵌套 push
$hash{"A"}=["pp"];想变成:$hash{"A"}=["p","q"];因为 $has ...