郭姐最近很無聊,於是就開始分石頭。郭姐有n顆石頭,她要把石頭分成m堆,每堆至少有乙個石子,她想知道有多少種分法題就是分堆問題子問題
f(n,m)=f(n-1,m-1)+f(n-m,m)
遞推公式可以這樣理解:假設n=7,m=3;
那麼7個物品分成3堆可以大致兩種分法:
1. 3堆裡面有一堆放乙個,其他6個隨意放;
2. 每堆裡面至少放乙個,其餘4個再分成三堆看有幾種方法;
其實就是分成兩組,一組是m-1堆都放乙個以上的物品,1堆放1個;另一組每堆至少放乙個,剩餘的再往每堆中隨便放,看有幾種方法,兩者之和就是答案了;
為什麼只分這兩種情況呢?其實也不難理解,就是dp過來的,或者遞推,都一樣
ac**:
#includeint dp[350][350];
int main()
} int n,m;
scanf("%d%d",&n,&m);
printf("%d\n",dp[n][m]);
return 0;
}
emmm遞迴memory limited exceeded;
目前先理解這麼多了,以後遇到分堆問題再做討論
附上大佬的遞迴演算法**:
#includeusing namespace std;
int fun(int n,int m,int k)
for(int i=k;i<=n;i++)
return ans;
}int main()
return 0;
}
思路和我的不一樣,學長的思路是:每次分出的石子大於等於上次分出的石子,最後遞迴查詢。 矩陣快速冪的應用 郭姐散步
題目 公升級版 題意 gj散步,最開始在座標系的中心 0,0 他可以向上,向左,向右但是不能向下,給出n表示gj走的步數,對於小資料 第一題 n 1000000,對於大資料 第二題 n 1e18,求公有多少種走的方法?題解 常見的一種矩陣快速冪的應用。由分析可知,每一步的下一步可以有兩種或者三種選擇...
36 取石頭 10分
題目內容 有甲乙兩個人玩取石子遊戲,共有n個石子 1 n 30000 兩個人輪流取,甲先取.每次最多取m個 1 m 30000 最少取乙個,當輪到誰取的時候沒有石子了,誰就贏.比如4個石子,每次最多取3個,那末先取的人 甲 一定贏n和m誰大沒有限制.甲拿走3個,乙隻拿走1個,下面輪到甲了,但是沒有石...
二分 跳石頭
一定要學好程式設計。一年一度的 跳石頭 比賽又要開始了 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選 擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 n 塊岩石 不含起點和終 點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達 終點。為了提...