题目传送门

又是一道状压+计数类好题hh(真香)。数据范围非常友好,告诉我们\(n<=18\),非常符合状压的性质。

其实感觉和\(Hamilton\)路径那题还是有些相似的,我们可以类似地设计出状态:\(f[i][j][w]\)表示当前状态为\(i\),现在位于\(j\)点,体力耗费为\(w\)(\(w\)只有两种可能)的方案数。

我们考虑转移的时候向之后的状态转移,设\(i\)为当前的状态,\(j\)为上一个最后落在的位置,\(k\)是这一次最后落在的位置。因为有滑稽态&&奇偶态两种,所以有两种转移。因为边数在\(1e5\)的范围内,所以肯定是个稠密图,有很多很多重边,又因为本题数据范围很小,不妨直接用邻接矩阵存下两点间有多少重边。转移的时候就可以直接从上一方案乘上重边数转移过来。又注意到题中的\(sum()\)其实是可以预处理出来的,所以我们就先搞出来降低复杂度。

最后我们得到了转移方程:

(f[i|(1<<(k-1))][k][(0+k*st[i])%2]+=1ll*f[i][j][0]*cnt[k][j])%=moder;
(f[i|(1<<(k-1))][k][(1+k*st[i])%2]+=1ll*f[i][j][1]*cnt[k][j])%=moder;

\(Code\)

#include<cstdio>
#include<algorithm>
#define maxn 300000 using namespace std;
typedef long long ll;
const ll moder=19260817; int n,m,opt,fake;
ll ans,st[maxn],f[maxn][20][3];
int cnt[30][30]; int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x=0,y=0;
scanf("%d%d",&x,&y);
cnt[x][y]++,cnt[y][x]++;
}
scanf("%d",&opt);
fake=(1<<n)-1;
for(int i=0;i<=fake;i++)
for(int j=0;j<n;j++)
if(i&(1<<j)) st[i]+=j+1;
f[1][1][0]=1;
for(int i=0;i<=fake;i++)
for(int j=1;j<=n;j++)
{//枚举上一个位置
if(!(i&(1<<(j-1)))) continue;
for(int k=1;k<=n;k++)
{//枚举当前落到的位置
if(i&(1<<(k-1))) continue;
(f[i|(1<<(k-1))][k][(0+k*st[i])%2]+=1ll*f[i][j][0]*cnt[k][j])%=moder;
(f[i|(1<<(k-1))][k][(1+k*st[i])%2]+=1ll*f[i][j][1]*cnt[k][j])%=moder;
}
}
for(int i=0;i<=fake;i++)
(ans+=f[i][n][opt])%=moder;
printf("%lld\n",ans);
return 0;
}

另外注意审题:题面中的价值的描述十分清楚,路径集合\(A\)是加入\(m\)前的。所以在转移和赋初值的时候要明确这一点。我才不会告诉你开始的时候没注意这一点

Luogu P4892 GodFly的寻宝之旅【状压dp】By cellur925的更多相关文章

  1. [LuoguP4892]GodFly的寻宝之旅 状压DP

    链接 基础状压DP,预处理出sum,按照题意模拟即可 复杂度 \(O(n^22^n)\) #include<bits/stdc++.h> #define REP(i,a,b) for(in ...

  2. Luogu 2157 [SDOI2009]学校食堂 - 状压dp

    Solution 比较好想的dp, 但是坑不少QAQ, 调半天 由于容忍度 $b_i$<= 7, 所以可以考虑将第$i$个人接下来的$b_i$ 个人作为一个维度记录状态. 于是我们定义数组$f[ ...

  3. 洛谷 P3112 后卫马克 —— 状压DP

    题目:https://www.luogu.org/problemnew/show/P3112 状压DP...转移不错. 代码如下: #include<iostream> #include& ...

  4. 洛谷 3112 [USACO14DEC]后卫马克Guard Mark——状压dp

    题目:https://www.luogu.org/problemnew/show/P3112 状压dp.发现只需要记录当前状态的牛中剩余承重最小的值. #include<iostream> ...

  5. BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4042 (Luogu) https://www.luogu.org/prob ...

  6. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

  7. [Luogu P2831] 愤怒的小鸟 (状压DP)

    题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索. ...

  8. [Luogu P2051] [AHOI2009]中国象棋 (状压DP->网格DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接 ...

  9. 【Luogu】P1896互不侵犯King(状压DP)

    题目链接 真是可恶,被数据范围坑了一把.想要一遍AC的希望破灭了…… 以后大家在做状压DP的时候一定要开long long…… 设f[i][j][k]表示考虑前i行,总共放了j个King,第i行状态为 ...

随机推荐

  1. java CyclicBarrier和wait/notifyAll

    1 CyclicBarrier 多个进程做自己的事情,然后先做完的就等待在CyclicBarrier上,然后最后一个做完的线程到来时会冲破CyclicBarrier,然后执行CyclicBarrier ...

  2. 阿里 JAVA 开发手册 学习 4 工程规约

    应用分层 1.分层如下 1)开放接口层:可以直接封装Service接口暴露成RPC:通过web封装成http接口:网关控制层等. 2)终端显示层:各个端的模板渲染并执行显示层. 3)Web层:主要是度 ...

  3. 诡异的json包含bom头

    今日项目碰到 需要调用php的一个接口  结果一直报返回的json字符串转对象  bom头报错 Exception in thread "main" com.fasterxml.j ...

  4. eval函数用法

    JavaScript 全局对象 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字 ...

  5. UVA11892 ENimEN —— 博弈

    题目链接:https://vjudge.net/problem/UVA-11892 题意: 两人玩游戏,有n堆石子,每堆有ai块石子,两人轮流取,要求一次只能选择一堆石子取任意块.最后取完的获胜. 题 ...

  6. linux应用之mysql数据库的安装及配置(centos)

    CentOS下Mysql数据库的安装与配置   如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲 ...

  7. Oracle中的关键字

    NVL和COALESCE的区别: nvl(COMMISSION_PCT,0)如果第一个参数为null,则返回第二个参数如果第一个参数为非null,则返回第一个参数 COALESCE(EXPR1,EXP ...

  8. bzoj 1127 [POI2008]KUP——思路(悬线法)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的“坏点”.有单个格子满足的就直接输出. 剩下的都是<K的 ...

  9. MSTAR GUI

    1.架构 WIN32 SDK ACT->CTL->API->GE/GOP ACT: Customized logic parts CTL: Behavior widgets API: ...

  10. live555 基本类之间的关系

    live555 中存在这5个最基本的类.每个类中都拥有一个BasicUsageEnvironment. 这是这几个类之间的相互关系.   MediaSession可以拥有多个subsession.