n的m劃分 劃分dp poj1664

2021-09-25 04:42:56 字數 1344 閱讀 8975

放蘋果

time limit:1000ms

memory limit:10000k

total submissions:40021

accepted:24456

description

把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用k表示)5,1,1和1,5,1 是同一種分法。

input

第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數m和n,以空格分開。1<=m,n<=10。

output

對輸入的每組資料m和n,用一行輸出相應的k。

sample input

1

7 3

sample output

8
dp[ i ][ j ]表示 i 的 j 劃分

i>=j時

dp[ i ][ j ]=dp[ i ][ j -1 ]+dp[ i - j][ j ](dp[ i ][ j -1 ]表示有乙個劃分為0,由動態規劃方程可知dp[ i ][ j -1 ]裡面包含有有兩個劃分為0的情況,依次類推,dp[ i - j][ j ]表示先給 j 個劃分每個分乙個 剩下 i-j 個求( i - j 的 j 劃分))

idp[ i ][ j ]=dp[ i ][ j -1 ]

ac**::

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

const int mod=100000007;

const int inf=0x3f3f3f3f;

const ll inff=0x3f3f3f3f3f3f3f3f;

const ll n=205;

const ll m=5005;

//const double pi=acos(-1);

#define mef(x) memset(x,-1,sizeof(x))

#define me0(x) memset(x,0,sizeof(x))

#define mei(x) memset(x,inf,sizeof(x))

int n,m;

void solve()

else}}

cout<>t;

while(t--)

return 0;

}

n的m劃分遞推

有n個無區別的物品,將它們劃分為不超過m組,求出劃分方法數模m的餘數。限制條件 1 m n 1000 2 m 10000 輸入n 4 m 3 m 10000 輸出 4 1 1 2 1 3 2 2 4 這樣的劃分被稱作n的m劃分,特別的,m n時被稱作n的劃分數。在此我們定義如下 dp i j j 的...

整數劃分(數的m劃分)

includeusing namespace std int f int n,int m n代表數字,m代表n的m劃分 int main 方式二 動態規劃 dp i j 表示i的j次劃分的情況種數 狀態轉移方程為dp i j dp i j j dp i 1 j 1 1.dp i 1 j 1 表示劃分...

將n劃分成最大數不超過m的劃分數

之前寫過類似的文章,今天看到另外一種劃分數的方法,也就是將n劃分成不大於m的種數。若是劃分多個整數可以存在相同的 dp n m dp n m 1 dp n m m dp n m 表示整數 n 的劃分中,每個數不大於 m 的劃分數。則劃分數可以分為兩種情況 a.劃分中每個數都小於 m,相當於每個數不大...