zoj 3747 排列組合dp

2021-08-08 13:58:29 字數 747 閱讀 3284

題意:

​ 現在要挑選n個士兵成為乙個排列,從三個不同的軍團之中,第乙個軍團最少u個人連續站在一起,第二個軍團最多有v個士兵站在一起,問有多少種不同的挑選方式。

思路:

​ 對於最多和最少問問題盡量轉化為最多的問題,比如第乙個軍團的限制條件,那麼在求的時候轉化為最多有i個人。

​ 排列組合計數問題很容易從前乙個狀態推到當前的狀態,定義:dp

[i][

0]表示第i個人是第一軍團的組合數,dp

[i][

1]表示第i個人是第二軍團的組合數,dp

[i][

2]表示第i個人是第三軍團的組合數。那麼就可以通過前乙個人是誰推導當前的可能數。

#include 

#include

#include

using namespace std;

const int maxn = 1000000+10;

const int

mod = 1000000007;

long

long dp[maxn][3];

int n;

long

long solve(int u,int v)

return (dp[n][0]+dp[n][1]+dp[n][2])%mod;

}int main()

return

0;}

題解 zoj 3747 計數dp 進擊的巨人

其實只是因為要給同學出題找的這道題,不過在網上看到的一些題解似乎對乙個細節並沒有寫得清楚,在此寫個題解 沒想到之前太早發,又碰上愛學習的神犇wx同學 有grp三個軍種,g最多連續m個,r最少連續k個,求安排n個的方案數 有多個測試用例 反正跑得過 對於每種情況,存在包含3個整數n 0 每種情況下一行...

8 排列組合

1 2 permutations 3 排列組合 4 輸入abc,輸出所有可能的排列結果 5 輸入 abc 6 輸出 abc 7 acb 8 bac 9 bca 10 cab 11 cba 12 1314 include15 16using namespace std 1718 int c1 0 19...

HDU 6143 排列組合 DP

題意 給出m字母,現在要求用m個字母去取名字,firstname 和 lastname 不能同時存在相同字母,問 會有多少種組合數,對於firstname 和 lastname 必須保證長度為n。資料量 0m 2000 題意 最開始最開始用的dp去推出所有的解,複雜度達到了n3 平常對複雜度的不重視...