計蒜客 T2155(數的劃分)

2021-10-10 01:29:33 字數 1431 閱讀 8066

將整數 n 分成 k 份,且每份不能為空,任意兩個方案不相同(不考慮順序)例如:n=7,k=3,下面三種分法被認為是相同的。

1,1,5 1,5,1 5,1,1

問有多少種不同的分法。

第一行有兩個整數 n,k (61 個整數,即不同的分法個數。

sample input

7 3
sample output

4
dfs(n,k)求解的是n劃分為k個整數的劃分數。

nn==k時,為1。

k==1時,為1。

考慮劃分的這k個數不包含1或包含1,則dfs(n,k)可由dfs(n-1,k-1)+dfs(n-k,k)擴充套件而來。dfs(n-k,k)可劃分的每個數都加1,這樣n劃分的k個數就不會包含1。

ac**

#include#include#includeusing namespace std;

int dfs(int n, int k)

void solve()

int main()

就是將上面的dfs思路轉化為dp實現。詳細見**。

#include #include #include #include #include #include #include #include #include #include #include #define cla(a, sum) memset(a, sum, sizeof(a))

#define rap(i, m, n) for(int i=m; i<=n; i++)

#define rep(i, m, n) for(int i=m; i>=n; i--)

#define bug printf("???\n")

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairp;

typedef pairpl;

const int inf = 0x3f3f3f3f;

const double eps = 1e-8;

const int mod=998244353;

const int maxn = 3e4;

const int n=1e5;

template void read(t &x)

while (isdigit(ch))

x *= f;

}ll dp[205][10]=,n,k;

int main()

} ll ans=dp[n][k];

cout

}

計蒜客 劃分整數(dp)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nn n 分解成不多於 kk k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1 n ...

計蒜客 基礎dp 劃分整數

蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 n 分解成不多於 k 個正整數相加的形式,那麼一共有多少種分解的方式呢 蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 n 300 和 k 1 k 300 含義如題意所示。乙個數字,代表所求的方案數。樣...

計蒜客 劃分整數(動態規劃)

劃分整數 蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 nnn 分解成不多於 kkk 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。輸入格式 共一行,包含兩個整數 n 1 n 300 n 1 leq n leq 300 n 1...