題意:
給出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組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面...