DP HDU 3944 排列 模板

2021-08-06 01:57:07 字數 1308 閱讀 1591

題意:    給定你 n,k,p,有乙個楊輝三角,現在從頂點到第n行第k列,只能向下或向右下,問最短路徑和模p的值

我們可以發現: 對於n>2k   的時候:  我們可以往左上走直到邊界然後再往上到頂點。這樣的路徑最短。

c(n,k)= c(n+1,m)+n-m;

對於n<=2k  的時候:  往上走到達邊界。  路徑最短

c(n,k)  = c(n+1,m+1)+m;

然後就是用lucas定理來簡化了。

但是不能直接用lucas 來遞迴。

這時候我們就可以換一種方法:  乘法逆元+lucas (費馬小定理)

#include#include#include#includeusing namespace std;

typedef long long ll;

ll pow(int a,int b,int p)

return res;

}ll c(int a,int b,int p)

return 0;

}

其實對於這個題我們也可以直接寫出乙個模板:(求c(n,m) %p  的另一種方法:

using namespace std;

typedef long long ll;

ll pow(int a,int b,int p)

return res;

}ll c(int a,int b,int p)

{ if(aa-b) b=a-b;

ll ans=1,ca=1,cb=1;

for(ll i=0;i

hdu 1716 排列2 排列組合

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

197 排列序號

是 這道題採取暴力解法會超時,應當對於原陣列的每乙個位置找到其後有多少個數比它小,然後再相加這些數與對應的權的成績。class solution long long ans 1,fac 1,cc 1 for int i len 2 i 0 i ans fac cc c i return ans 注意...

441 排列硬幣

你總共有 n 枚硬幣,你需要將它們擺成乙個階梯形狀,第 k 行就必須正好有 k 枚硬幣。給定乙個數字 n,找出可形成完整階梯行的總行數。n 是乙個非負整數,並且在32位有符號整型的範圍內。示例 1 n 5 硬幣可排列成以下幾行 因為第三行不完整,所以返回2.示例 2 n 8 硬幣可排列成以下幾行 因...