題意:
現在要挑選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 平常對複雜度的不重視...