求大佬看看状压记忆化搜索有过的可能吗

P1171 售货员的难题

@[114514wxy](/user/602361) 显然有,我当时写的爆搜过了
by lovely_hyzhuo @ 2023-12-30 17:32:04


```cpp #include<iostream> using namespace std; int n,dis[22][22]; int dp[22][4194304]; bool v[22]; inline int read(){ int rn=0,rf=1; char rc=getchar(); while(rc<'0'||rc>'9') rf=(rc=='-')?-1:1,rc=getchar(); while(rc>='0'&&rc<='9') rn=(rn<<1)+(rn<<3)+(rc^48),rc=getchar(); return rn*rf; } inline void write(int x) { if(x<0) putchar('-'),write(-x); else if(x<10) putchar(x+'0'); else write(x/10),putchar(x%10+'0'); } inline int mn(int a,int b){ return (a<b)?a:b; } inline int dfs(int p,int zt,int stp){ if(stp>=n) return dis[p][1]; if(dp[p][zt]) return dp[p][zt]; v[p]=1,dp[p][zt]=0x7f7f7f7f; for(int i=1;i<=n;++i){ if(v[i]) continue; dp[p][zt]=mn(dfs(i,zt+(1<<p),stp+1)+dis[p][i],dp[p][zt]); } v[p]=0; return dp[p][zt]; } int main(){ n=read(); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dis[i][j]=read(); write(dfs(1,0,1)); return 0; } ``` 1. 用快写喵~ 2. 快读加`inline`喵~ 3. `dp`数组大小直接写喵~ 4. `#include<bits/stdc++.h>`改`#include<iostream>`喵~ $1.18s->887ms $
by 董乐山2020 @ 2024-02-19 21:40:11


神犇-卡常のkami! 经过蒟蒻一番测试似乎inline的优化最大(尤其是dfs函数的inline很重要) 但是据百度似乎inline对于内部有while或自身递归调用的函数不起作用所以我以前才没加inline 求大佬解释
by 114514wxy @ 2024-02-29 21:30:35


|