題解 三隻小豬

2022-07-30 02:39:12 字數 1245 閱讀 7460

傳送門

我們考慮將第n只小豬塞進m個房子裡(記做f[n][m]):

顯然答案分為兩部分:

第一部分:

將這只豬扔到乙個新房間,共有方案數:f[n-1][m-1]

第二部分:

將這只豬扔進之前的房間,乘法原理知共有方案數:m*f[n-1][m]

綜上:有狀態轉移方程:f[n][m]=f[n-1][m-1]+m*f[n-1][m]

特別的:f[1][1]=1

這種數就是將n個不同的元素拆分成m個集合的方案數,又稱:第二類斯特林數。

同時由於資料範圍較大,考慮使用高精加和高精乘。

那麼我們令f[i][j][0],表示f[i][j]的位數,之後為f[i][j]每一位。

#include#include

#include

#include

#include

using

namespace

std;

int f[60][60][60

];int _ans[60

],_size;

intn,m;

void _change(int x,int

y) _size=f[x-1][y][0

];

if(_x!=0

) _ans[++_size]=_x;

f[x][y][

0]=1

; _x=0

;

while(f[x][y][0]<=f[x-1][y-1][0]||f[x][y][0]<=_size)

f[x][y][f[x][y][

0]]=_x;

if(f[x][y][f[x][y][0]]==0&&f[x][y][0]!=1

) f[x][y][

0]--;

}int

main()

f[1][1][0]=1

; f[

1][1][1]=1

;

for(int i=2;i<=n;i++)

for(int j=1;j<=min(i,m);j++)

_change(i,j);

if(f[n][m][0]==1&&f[n][m][1]==0

)

for(int i=f[n][m][0];i>=1;i--)

printf("%d

",f[n][m][i]);

}

初識C 案例三隻小豬豬稱體重

三隻小豬稱體重是我學習c 遇到的第乙個困擾案例 關鍵就在於初學不能很好的運用if的巢狀,經常搞的頭昏 特別是在三隻小豬同等體重的情況下 後來我在看了 歲月蹉跎的一杯酒 這個大佬發的三隻小豬的文章後自己又想了想,覺得邏輯運算子是真的好用 剛開始建立三隻小豬的變數以及體重輸入儲存都不是問題 includ...

第三隻貓進門

在把小灰接回來之前,就連救助人都曾勸告過我,說乙個人帶兩隻貓就差不多了,帶三隻會很辛苦。我說不怕,不就是多吃點糧食多鏟點貓屎嗎?事實證明,流浪貓的寄養工作並不都那麼好做。小灰是花咪10月14日左右發現的,當時它在北窪路一帶,和另外幾隻流浪貓生活在一起。從看到小灰的第一眼起,我就為它牽腸掛肚,這麼漂亮...

理財必備的三隻基金

提起這幾年理財市場的變化,不能不說到開放式 從2001年9月首只開放式 華安創新問世以來,經過幾年的發展,市場無論是從數量 規模還是品種,都發生了翻天覆地的變化,特別是 品種由過去單一的 發展成為目前的 債券 混合 保本 貨幣 百花齊放。數量和品種不斷增多對投資者來說肯定是好事,但很多任務薪族平常忙...