日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法】划分数 动态规划

發布時間:2024/4/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法】划分数 动态规划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

劃分數

有n個無區別的物品,將他們劃分成不超過m組,求出劃分方法數模M的余數。

限制條件:

1 <= m <= n <= 1000;

2 <= M <= 10000;

輸入: 輸入 n,m,M分別代表n個物品、m個組、對M取模。

輸出: 輸出劃分方法數對M取模的余數。

樣例輸入:

4 3 1000

樣例輸出:

4

所有可能的情況都可以看作是把n劃分成m份。只是有的是取0的。

思路:

定義題目為n的m劃分數。

dp[i][j]表示 j 的 i 劃分數。

分類討論:

1.j >= i時,dp[i][j] = dp[i-1]j + dp[i][j-i](當前位不取0,先把每一個置為1,再將剩下的j-i分下去);

2.j < i時,dp[i][j] = dp[i-1][j]; 當前位只能取0。

注意,j的i劃分表示的意義為 j固定,i可以取到1-i。

代碼:

#include<cstdio> #include<cstring> #include<iostream> using namespace std;int dp[1010][1010];int main() { int n,m,mod;cin >> n >> m >> mod;for(int i = 1;i <= m; i++){for(int j = 0;j <= n; j++){if(j - i >= 0){dp[i][j] = (dp[i-1][j] + dp[i][j-i])%mod;}else{dp[i][j] = dp[i-1][j];}}}cout << dp[m][n] << endl;return 0; }

總結

以上是生活随笔為你收集整理的【算法】划分数 动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。