題解 字首單詞

2021-10-06 20:55:47 字數 663 閱讀 9199

一組單詞是安全的,當且僅當不存在乙個單詞是另乙個單詞的字首,這樣才能保證資料不容易被誤解。現在你手上有乙個單詞集合,你需要計算有多少個子集是安全的。

注意空集永遠是安全的。

首先:設dp[i]表示前i個集合以i結尾的集合數

核心**:dp[i] = dp[j](1<=j但是問題在於與j不互為字首的單詞不一定與i不互為字首,這裡直接從小到大排序就可以解決。

為什麼呢?

證畢。補充:這裡排序後的n個數沒有變,求解空間是一樣的。若不排序,則答案一定會偏大(有些決策會被計算,實際並不符合),而不會偏小

膜拜:出題人c20210826

**如下:

#include

#include

#include

using

namespace std;

string s[55]

;int n , f[55]

[55];

long

long dp[55]

;//2^50次方在longlong以內

intcompare

(int x ,

int y)

return0;

}int

main()

題解 P1666 字首單詞

考慮到沒有相同的字串,不難發現這是乙個樹形dp,在字典樹上,一旦某個節點被選中,其子樹中的任何節點都不能被選中。如果使用字串比較建圖的話,需要注意去除多重的邊。include include include include includeusing namespace std typedef uns...

字首單詞 好題

題目描述 一組單詞是安全的,當且僅當不存在乙個單詞是另乙個單詞的字首,這樣才能保證資料不容易被誤解。現在你手上有乙個單詞集合,你需要計算有多少個子集是安全的。注意空集永遠是安全的。輸入格式 第一行乙個數 表示集合的大小,以下n行。每行乙個由 構成的字串。輸出格式 安全子集的個數。樣例輸入 1 3he...

單詞檢索 題解

呃 這題,真的不想說話。給出n個由小寫字母組成的字串,統計至少在m個字串中出現過的長度為l的字串數 n,m 2000,l i,l 1000 n m 2000,l i,l 1000 一看,就知道是雜湊 對於每個長度為l的串,都雜湊一下 還要記得o 1 o 1 推下乙個雜湊值,對於同乙個模板中出現多次的...