HDU 6143 排列組合 DP

2021-08-07 02:14:01 字數 1241 閱讀 8590

題意:

​ 給出m字母,現在要求用m個字母去取名字,firstname 和 lastname 不能同時存在相同字母,問:會有多少種組合數,對於firstname 和 lastname 必須保證長度為n。

​ 資料量

0m<

2000

題意:

​ 最開始最開始用的dp去推出所有的解,複雜度達到了n3

,平常對複雜度的不重視導致比賽時候頻頻犯錯,用到了超時演算法,以至於到後來一直去想優化,無論怎麼優化沒有思考對原始計算的公式進行:公式優化。失敗的題目,沒寫出也是一種對不重視複雜度的懲罰,認,下次努力。

​ 若想求出所有的可能免不了要分情況,對於第一name,裡面的字母數量有限制,可以從1列舉,但是每次列舉需要求出i種字母恰好填滿n個位置的排列數,這個可以通過預處理,定義:dp

[i] 表示i種字母恰好填滿n個位置的總數,那麼當求出i的時候可以先算出總的可能數,減去不滿足條件的總數即可,總數即為in

: 對於每乙個位置都有i種情況,不滿足恰好填滿n個位置的情況就是c(

i,j)

∗dp[

j]:(

j即少於i種的總情況。

#include 

#include

#include

using

namespace

std;

const

int maxn = 2005;

const

int mod = 1000000007;

typedef

long

long ll;

ll dp[maxn];

ll n,m;

const

int maxk = 2000 + 5;

ll c[maxk][maxk];

void table_c()

}//快速冪

ll pow(ll a, ll x, ll p = mod)

return res;

}void dp(int n)

ll temp1 = pow(i,n);

dp[i] = (temp1-temp+mod)%mod;

}}int main(int argc, char

const *argv)

printf("%i64d\n",ans%mod);

}return

0;}

hdu 6143 組合數學 dp

題意 m個字母,組成兩個長度為n的字元,其中乙個字母不能同時出現在兩個串中。問總方案?思路 列舉m個中恰好有i個在第乙個串,有j個在第二個串。然後求個和。具體其中n個空恰好k種顏色,可以用dp預處理。dp j i dp j 1 i i mod dp j 1 i 1 i mod mod include...

hdu 1716 排列2 排列組合

問題描述 ray又對數字的列產生了興趣 現有四張卡片,用這四張卡片能排列出很多不同的4位數,要求按從小到大的順序輸出這些4位數 input 每組資料佔一行,代表四張卡片上的數字 0 數字 9 如果四張卡片都是0,則輸入結束。output 對每組卡片按從小到大的順序輸出所有能由這四張卡片組成的4位數,...

hdu 2047 排列組合

problem description 今年的acm暑期集訓隊一共有18人,分為6支隊伍。其中有乙個叫做eof的隊伍,由04級的阿牛 xc以及05級的coy組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面...