洛谷 P1666 字首單詞

2021-08-03 15:47:37 字數 468 閱讀 7239

首先空集合也是答案,所以樣例是對的;

那麼我們思考;

假如兩個串ab;

a< b

如果這個時候a不是b的字首;

那麼所有字典序小於a的並且不是a的字首的字串均不是b的字首;

所以我們先對串排序,然後直接dp

f[i][j]表示1~j號串裡取i個(j號必須取)的所喲方案數;

f[0][0]=0;

#include

#define ll long long

using

namespace

std;

const ll n=55;

string s[n];

ll f[n][n];

ll n,ans;

bool can(string a,string b)

int main()

P1666字首單詞

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

題解 P1666 字首單詞

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

洛谷p1019 單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...