【Luogu】P4363一双木棋(状压爆搜)
唉,只有AC了这道题才会感叹考场上没有想出解法的我是多么智障。
我甚至连任何想法都没有。
天啊我当时到底在想些什么。
AC这道题我就能进前15了诶。
我们发现只要确定了轮廓线那么此时的状态就是唯一的。
那么,用15进制的状态去表示一下此时的轮廓线。详细说来,就是我们有n个数,第i个数表示第i行放了多少棋子,然后我们把这n个数用15进制表示一下(为什么不是m+1进制呢?qwq因为15进制写着方便),就可以爆搜啦
然后因为开O2的关系,map记忆化一下就可以A啦
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<map>
#define maxs 30000020
#define maxn 120
#define mod 15
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} map<long long,long long>s; long long q[maxn][maxn]; long long f[maxs][];
bool vis[maxs];
long long tot;
long long End;
long long n,m;
long long mul[maxn]; inline void check(long long state){ if(s.count(state)==) s[state]=++tot; } void output(long long ret){
for(long long i=;i<=n;++i){
printf("%lld ",ret%);
ret/=;
}
printf("\n");
return;
} void dfs(long long state){
//output(state);
check(state);
if(vis[s[state]]) return;
vis[s[state]]=;
long long &beta=f[s[state]][],&alpha=f[s[state]][];
if(state==End) return;
beta=0x7fffffff;
long long ret=state,last=m; for(long long i=;i<=n;++i){
long long now=ret%mod;
if(now<last){
long long nxt=state-((state/mul[i-])%mod)*mul[i-];
nxt+=(now+)*mul[i-];
//output(state);
//output(nxt);
//printf("%d\n",now);
dfs(nxt);
beta=min(beta,f[s[nxt]][]);
alpha=max(alpha,f[s[nxt]][]+q[i][now+]);
}
last=now;
ret/=mod;
}
//output(state);
//printf("%lld %lld\n",alpha,beta);
//printf("\n");
return;
} int main(){
n=read(),m=read();
mul[]=;
for(long long i=;i<=n;++i) mul[i]=mul[i-]*mod;
long long ans=;
for(long long i=;i<=n;++i)
for(long long j=;j<=m;++j) q[i][j]=read();
for(long long i=;i<=n;++i)
for(long long j=;j<=m;++j){
long long x=read();
ans-=x;
q[i][j]+=x;
}
for(long long i=;i<=n;++i) End=(End*mod)+m;
dfs();
printf("%lld",f[s[]][]+ans);
return ;
}
【Luogu】P4363一双木棋(状压爆搜)的更多相关文章
- B5248 [2018多省省队联测]一双木棋 状压dp
这个题当时划水,得了二十分,现在来整一整. 这个题用状压来压缩边界线,然后通过记忆化搜索进行dp.我们可以观察到,其实每次转移,就是把一个1向左移一位.最后的状态设为0. 这其中还要有一个变量来记录谁 ...
- 洛谷P4363 一双木棋 chess
洛谷P4363 一双木棋 chess 省选最水的一道题了. 且看我数个月AC一道题...... 具体是这样的:我们发现这个下了棋的地方一定形成一个锯齿形,那么怎么状态压缩呢? 维护轮廓线! 从左下角出 ...
- bzoj1054: [HAOI2008]移动玩具 状压+爆搜即可
题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初的玩具状态 ...
- 洛谷P4363 一双木棋chess [九省联考2018] 搜索+hash
正解:记搜+hash 解题报告: 传送门! 因为看到nm范围特别小,,,所以直接考虑爆搜(bushi 先考虑爆搜之后再想优化什么的嘛QwQ 首先对这种都要最优的,就可以直接把答案设为针对某一方,然后题 ...
- LOJ#2471「九省联考 2018」一双木棋 MinMax博弈+记搜
题面 戳这里 题解 因为每行取的数的个数是单调不增的,感觉状态数不会很多? 怒而记搜,结果过了... #include<bits/stdc++.h> #define For(i,x,y) ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告
P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...
- [BZOJ5248][九省联考2018]一双木棋(连通性DP,对抗搜索)
5248: [2018多省省队联测]一双木棋 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 43 Solved: 34[Submit][Status ...
- 【BZOJ5248】【九省联考2018】一双木棋(搜索,哈希)
[BZOJ5248][九省联考2018]一双木棋(搜索,哈希) 题面 BZOJ Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何 ...
- 一双木棋(chess)
一双木棋(chess) 题目描述 菲菲和牛牛在一块 nn 行 mm 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束.落子的规 ...
随机推荐
- 在广州学习PHP零基础可以学习吗?
PHP现今作为互联网运用很广泛的编程语言,市场需求量也越来越高,而PHP开发工程师的薪资也是一路水涨船高,更多的人看到了PHP的发展前景,纷纷都想投入到PHP的开发大军中来,那么对于很多转行或者零基础 ...
- python基础教程总结9——模块,包,标准库
1. 模块 在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用. 1.1 模块搜索路径 导入模块时,是按照sys ...
- Winform C# 编程 1
http://b6ec263c.wiz03.com/share/s/2SX2oY0nX4f32CY5ax1bapaL01Wmfc0B-QfB2pS1y13peTbq
- MyEclipse Update Progress Error解决方法
MyEclipse Update Progress Error现象:频繁弹出Update Progress(Time of error:……)窗口..log文件里 org.eclipse.swt.SW ...
- HDU 4738 Caocao's Bridges taijan (求割边,神坑)
神坑题.这题的坑点有1.判断连通,2.有重边,3.至少要有一个人背*** 因为有重边,tarjan的时候不能用子结点和父节点来判断是不是树边的二次访问,所以我的采用用前向星存边编号的奇偶性关系,用^1 ...
- Django form组件应用
form 组件的使用 class Register(forms.Form): user = forms.CharField(min_length=2, widget=widgets.TextInput ...
- 一些常用的HTML标签
由于本人目前没有系统学习,日常碰见哪个有用就记下来. pre标签 可定义预格式化的文本,在pre元素中的文本会保留空格和换行符.比如我们展示源代码的时候,只要放一个pre标签,然后把代码直接复制.粘贴 ...
- Win10开机启动项
键盘输入:win+r 输入命令:shell:startup
- perl -p -i -w -e
.txt kllk nciuwbufcbew``````//.]];s[[..; klklkl x,dsncdk,;l,ex xw,eocxmcmck .txt .txt kkkkkkkkkkkkkk ...
- Dojo的dojoConfig函数
在我们引入 Dojo 的时候都会先做一些全局的配置,所使用的就是 Dojo 的 Config 接口. dojoConfig为以前的dgConfig函数. <script type="t ...