來自倉鼠老師的話:
這題實際上就是帶權有向圖上點不重複的最長路徑。從理論上來說,應該是個np問題。就是把每一句話設為乙個點,然後可以\(o(n^2)\)的連邊,怎麼連邊就不說了吧。。
設dp[i][j]
為當前走到\(i\)點,已走的狀態為\(j\)。然後就可以愉快地進行狀壓dp。
有乙個經驗性總結:列舉狀態的那一維一定要放在前面!不然答案是錯的!我已經親身經歷過3次了!
今年再來出狀壓dp哩
**:
#include#include#includeconst int maxn = 17;
struct edges
e[maxn * maxn];
int head[maxn], tot;
int start[maxn], end[maxn];
int weight[maxn];
int dp[maxn][65537];
int n;
int id(char x)
void link(int u, int v)
; head[u] = tot;
}int main()
for(int i = 1; i <= n; i++)
}int s = (1 << n) - 1;
for(int i = 1; i <= n; i++) dp[i][1 << (i - 1)] = weight[i];
for(int j = 1; j <= s; j++)}}
}int ans = 0;
for(int i = 1; i <= n; i++)
}printf("%d\n", ans);
return 0;
}
P1278 單詞遊戲
題目描述 io和ao在玩乙個單詞遊戲。他們輪流說出乙個僅包含母音字母的單詞,並且後乙個單詞的第乙個字母必須與前乙個單詞的最後乙個字母一致。遊戲可以從任何乙個單詞開始。任何單詞禁止說兩遍 遊戲中只能使用給定詞典中含有的單詞。遊戲的複雜度定義為遊戲中所使用的單詞長度總和。編寫程式,求出使用一本給定的詞典...
P1278 單詞遊戲
一道比較基礎的狀壓題,看到題解很多人都打的記搜,小蒟蒻來發個狀壓dp。由於不能多次使用同乙個單詞,對於每個單詞只有0 不選 1 選 兩種情況,並且n只有16顯然是狀壓了。對於每個單詞我們只關心首尾和長度,所以就記下每個單詞的首尾和長度。這題最簡單的點就是狀態很好設 f i j i為二進位制串表示用了...
洛谷P1278 單詞遊戲
io和ao在玩乙個單詞遊戲。他們輪流說出乙個僅包含母音字母的單詞,並且後乙個單詞的第乙個字母必須與前乙個單詞的最後乙個字母一致。遊戲可以從任何乙個單詞開始。任何單詞禁止說兩遍,遊戲中只能使用給定詞典中含有的單詞。遊戲的複雜度定義為遊戲中所使用的單詞長度總和。編寫程式,求出使用一本給定的詞典來玩這個遊...