poj 1664 放蘋果 劃分數

2022-03-07 21:58:02 字數 1616 閱讀 9162

題意:中文題目,不解釋。。。

題解:第一種方法是暴力深搜:列舉盤子1~n放蘋果數量的所有情況,不需要剪枝;將每次列舉的情況,即每個盤的蘋果數量,以字典序排序,然後存進set裡 以此去重像"5 1 1"和"1 5 1"這種相同情況。

1/**

2* @author wixson3*/

4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include

15const

int inf=0x3f3f3f3f;16

const

double pi=acos(-1.0

);17

const

double eps=1e-8;18

using

namespace

std;

19 typedef long

long

ll;20 typedef pairp;

2122

intn,m;

23set

s;24set

::iterator ite;

25int

ans;

26char str[12

];27

void dfs(int pos,int

left)

2839

return;40

}41//42

for(int i=0;i<=left;i++)

4347}48

intmain()

4961

return0;

62 }

第二種方法: 遞推。利用dp的思想,來看下樣例:將7個蘋果放進3個盤子裡,可以分2種情況考慮:1.空著乙個盤子不放,即將7個蘋果放進2個盤子裡;2.先每個盤子均放進乙個蘋果,然後將剩下的4個蘋果放進3個盤子裡。即dp[m][n]=dp[m-1][n]+dp[m-n][n](m>=n),  另外,顯而易見 dp[m][n]=dp[m][m](m

1/**

2* @author wixson3*/

4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include

15const

int inf=0x3f3f3f3f;16

const

double pi=acos(-1.0

);17

const

double eps=1e-8;18

using

namespace

std;

19 typedef long

long

ll;20 typedef pairp;

2122

intn,m;

23int dp(int m,int

n)24

29int

main()

3039

return0;

40 }

POJ1664 放蘋果(整數劃分)

description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。input 第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。output 對輸入的每組資料m...

poj1664放蘋果 遞迴

放蘋果time limit 1000ms memory limit 10000k total submissions 23149 accepted 14694 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1...

poj 1664 放蘋果 遞推

解題思路 我們不妨令f m,n 表示m個蘋果放到n個盤子裡有多少種放法,下面對不同的情況給予討論 1 當盤子數為1的時候,只有一種放法就是把所有蘋果放到乙個盤子裡。2 當蘋果數為0的時候,也只有一種放法。3 當m n時,也分兩種情況討論,一種是至少有乙個盤子裡不放蘋果,這樣子就相當於f m,n 1 ...