題解 P1666 字首單詞

2022-01-30 14:25:24 字數 472 閱讀 8632

考慮到沒有相同的字串,不難發現這是乙個樹形dp,在字典樹上,一旦某個節點被選中,其子樹中的任何節點都不能被選中。

如果使用字串比較建圖的話,需要注意去除多重的邊。

#include#include#include#include#includeusing namespace std;

typedef unsigned long long ll;

const int maxn=55;

int n,in[maxn];

string s[maxn];

ll f[maxn];

vectorg[maxn];

void dfs(int u)

} for(int i=1;i<=n;i++) if(in[i]==0) g[0].push_back(i);

dfs(0);

cout

}

P1666字首單詞

題目傳送門點我傳送 字典樹 樹型dp 非常奇妙的一種解法 第一部分 構建樹 先對來的單詞讀入,插入字典樹 然後對於一顆字典樹,其實是有很多無用邊的,所以我們需要刪去一些邊 刪去非單詞節點和非單詞節點之間的邊,其實就是下面這個函式 void rebuild int now,int fa for int...

洛谷 P1666 字首單詞

首先空集合也是答案,所以樣例是對的 那麼我們思考 假如兩個串ab a b 如果這個時候a不是b的字首 那麼所有字典序小於a的並且不是a的字首的字串均不是b的字首 所以我們先對串排序,然後直接dp f i j 表示1 j號串裡取i個 j號必須取 的所喲方案數 f 0 0 0 include defin...

題解 字首單詞

一組單詞是安全的,當且僅當不存在乙個單詞是另乙個單詞的字首,這樣才能保證資料不容易被誤解。現在你手上有乙個單詞集合,你需要計算有多少個子集是安全的。注意空集永遠是安全的。首先 設dp i 表示前i個集合以i結尾的集合數 核心 dp i dp j 1 j但是問題在於與j不互為字首的單詞不一定與i不互為...