寫了一天,還是wa,後來看了大佬的題解,貼一下鏈結
#include
#include
#include
//poj不能用 #include
using
namespace std;
const
int maxn=14;
typedef
long
long ll;
int v[maxn]
;//點權值
ll dp[
1<[maxn]
[maxn]
;ll num[
1<[maxn]
[maxn]
;//注意方案數可能會爆int
bool p[maxn]
[maxn]
;//判斷是否連通
int n,m;
long
long ans,sum,rr;
int t;
inline
void
init()
intmain()
for(
int i=
1,f,t;i<=m;i++)if
(n==1)
for(
int i=
0;i)//預處理邊界值
for(
int j=
0;j//三維的狀態壓縮
long
long jd=
1/狀態壓縮dp的邊界
for(
int k=
0;k)for
(int i=
0;i)for
(int j=
0;j)else
if(dp[k]
[i][j]
==cal)}}
}}rr=0;
ans=-1
;for
(int i=
0;i)for
(int j=
0;j(i!=j)
else
if(ans==dp[jd-1]
[i][j]
) rr+
=1ll
*num[jd-1]
[i][j]
;//cout<}
if(ans==-1
)else cout<' '<2/rr/2去除題意中的重複
}}
POJ 2288 狀壓dp Hamilton迴路
題意 hamilton迴路的權值為 1 經過的每條邊的兩個點的點權和 2 連續經過兩點的乘積 3 如果三條邊形成三角形則再加上三個點權的乘積 求最大值 路徑條數 思路 10來個點用乙個小的鄰接矩陣就可以判斷是否相連,判斷三角形就可以在dp加一維記錄前兩個點的資訊,列舉的時候多列舉到前2個點 即dp ...
POJ 1324(A 狀態壓縮)
真是好題啊,各種tle之後看了人家的解題報告才a的 1 一開始用deque儲存狀態資訊,用queue進行bfs,tle 2 試圖用陣列儲存狀態資訊,自己寫佇列進行bfs,還是tle 3 由於row和col都小於20,試圖用5 2個bit表示乙個位置,還是tle 終於看了discuss,找到了大牛的解...
1185 POJ 狀態壓縮
這道題寫的我直 寫了6遍,不知道 錯了,然後按照題解,一點一點寫下來,跪哭了,太渣了 ps include include include include include include include include include include include define ll int64 ...