插頭dp的幾個模板

2021-09-06 17:07:10 字數 2237 閱讀 4179

/*

ural1519

求經過全部可行點的哈密頓迴路的個數

括號匹配法,轉移有點複雜,可是時間空間比較小

*/#include#include#include#include#include#include#include#include#define ll long long

using namespace std;

const int maxn=30001;

int n,m,now,pre;

int mov[13]=;//依據進製選擇移位距離

char gp[20][20],fx,fy;//存圖,最後乙個可行點的座標

inline int getbit(ll st,int k)//獲得第k位的狀態

inline int pybit(ll st,int k)

} sta[size]=st,sum[size]=v;

next[size]=head[hash],head[hash]=size++;

}}dp[2];

inline int fl(ll st,int pos)//從左往右找到和當前pos位置匹配的右括號

}inline int fr(ll st,int pos)//從右往左找到和當前pos位置匹配的左括號

}void dp(int x,int y,int k)//每種狀態的轉移,依據須要改動

if(x0&&!fx;i--)//尋找最後乙個可行點

}if(fx==0) puts("0");

else cout<#include#include#include#include#include#define ll long long

using namespace std;

const int maxn=30001,inc=3,bit=7;//3位二進位制以及111的表示

int n,m,now,pre,code[20],bin[20],res[20];//用來表示狀態的每一位的數值

char gp[20][20],fx,fy;//圖和最後的可行點

struct node//離散化hash

void push(ll st,const ll v)

}sta[size]=st,sum[size]=v;

next[size]=head[hash],head[hash]=size++;

}}dp[2];

inline ll encode(int m)//將code轉換成狀態

return st;

}inline void decode(ll st,int m)//將狀態轉換成code

}void dp(int x,int y,int k)//dp詳細情況詳細分析

;struct node

void push(ll st,const ll v)

}sta[size]=st,sum[size]=v;

next[size]=head[hash],head[hash]=size++;

}}dp[2];

inline int getbit(ll st,int k)

inline int pybit(ll st,int k)

}int count(ll st)//統計單插頭的個數

return cnt;

}int n,m,gp[20][20];

ll dp()

void push(ll st,const ll v,ll cs,int x,int y,bool cl,int k)

}sta[size]=st,clo[size]=cs,sum[size]=v;

res[x][y][size]=cl,pre[x][y][size]=k;

next[size]=head[hash],head[hash]=size++;

}}dp[2];

ll encode(int m)//注意從0開始,由於可能有m個不同顏色的插頭

return st;

}void decode(ll st,int m)

}int n,m,now,old;

char gp[20][20];

bool check(ll cs,int x,int y,int m,int nc)//檢查當前狀態是否是兩個狀態的分界線

if(cnt==1)

for(int i=0;iputs(""); }}

int main()

slove();

} return 0;

}

插頭dp的幾個模板

ural1519 求經過所有可行點的哈密頓迴路的個數 括號匹配法,轉移有點複雜,但是時間空間比較小 include include include include include include include include define ll long long using namespace ...

插頭dp模板

ural 1519 陳丹琦 基於連通性狀態壓縮的動態規劃問題 中的例題 給出 n m 的方格,有些格仔不能鋪線,其它格仔必須鋪,形成乙個閉合迴路。問有多少種鋪法?第 1 行,n,m 2 le n,m le 12 從第 2 行到第 n 1 行,每行一段字串 m 個字元 表不能鋪線,表必須鋪 輸出乙個整...

P5056 模板 插頭dp

插頭dp的模板 插頭dp括號序列的方法其實就是利用迴路不能交叉匹配,必定兩兩配對的性質通過括號序列描述了連通塊的匹配關係 注意分類討論 判斷狀態合法 最邊上一圈不能有插頭延伸過去,要注意 include include include define int long long using names...