NYOJ 90 整数划分

来源:互联网 发布:冬天网络热搜产品 编辑:程序博客网 时间:2024/05/10 11:35

整数划分

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 
其中n1≥n2≥…≥nk≥1,k≥1。 
正整数n的这种表示称为正整数n的划分。求正整数n的不 
同划分个数。 
例如正整数6有如下11种不同的划分: 
6; 
5+1; 
4+2,4+1+1; 
3+3,3+2+1,3+1+1+1; 
2+2+2,2+2+1+1,2+1+1+1+1; 
1+1+1+1+1+1。 

输入
第一行是测试数据的数目M(1<=M<=10)。以下每行均包含一个整数n(1<=n<=10)。
输出
输出每组测试数据有多少种分法。
样例输入
16
样例输出
11
来源

[苗栋栋]原创

经典的动态规划问题(划分数):将一个数n划分为最大值不超过m的数相加,当m==n时为n的划分数

设dp[n][m]  表示n的m划分时的方案数

当n=1时,只有一种划分方式{1};

当m=1时,同样只有一种划分方式{1,1,1,.......}

当n<m时,因为无法取到负数,所以这种情况同dp[n][n]

当n>m时,可以这样看

若划分的方案中含有m则可分为n={m,{x1,x2,....}}  所以对剩余的n-m值在做最大值不超过m的划分(这次划分同样可能再次取到m)得到dp[n-m][m];

若划分中不包含m,则划分的最大值为m-1,于是相当于对n进行m-1划分,得dp[n][m-1]

综上当n>m 时dp[n][m]=dp[n-m][m]+dp[n][m-1];

当n==m时,肯定含个1,即直接划分1次,其次若划分的数都小于m,就是对n的m-1(最大值不超过m-1)划分即dp[n][m-1]

所以为1+dp[n][m-1];

代码如下:

#include<iostream>#include<cstring>#include<cstdlib>#define MAX 15using namespace std;int dp[MAX][MAX];int main(){int M; cin>>M;while(M--){int n; cin>>n;memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){dp[1][i]=dp[i][1]=1;}for(int i=2;i<=n;i++){for(int j=1;j<=n;j++){if(i==j){dp[i][j]=dp[i][j-1]+1;}else if(i<j){dp[i][j]=dp[i][i];}else if(i>j){dp[i][j]=dp[i][j-1]+dp[i-j][j];}}}cout<<dp[n][n]<<endl;}}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 露脸怀孕嫂嫂在线播放 中文字幕侵犯妻子在线疯人院 硬上嫂嫂在线 在线播放 怀孕 中文字幕女老师在线播放 丈夫经常晚归妻子不满离婚 农村孕妇对白 年轻母亲9完整高清免费观看 国产孕妇碰碰碰 厨房侵犯中文字幕 我邻居的妻子中文字幕在线 怀孕全部过程视频播放 水电工在厨房和妻子的视频 妻子出轨水电工在线播放 老公把婆婆干怀孕 在丈夫面前被侵 中文字幕全集 部长的妻子味道中文字幕 中文字幕被水电工掠夺的妻子 妻子在厨房跟水电工 互动 妻子与水电工在线 丈夫出差妻子与水电工 樱萌子被水电工侵犯中文字幕 在丈夫的面前侵犯入侵中文字幕 好妻子在线中文字幕 前田香织侵犯中文字幕 佐佐木明希上司中文字幕迅雷 医生d淫孕妇 公公一晚上要8次 公公现在就想要白关婷中文字幕 丈夫上司侵犯系列在线 义父犯美媳嫁樱花叶菜在线播放 儿子的妻子在线中文字幕云播 老公去世公公每天晚上抱着我睡 被水电工掠夺的妻子在线播放b 佐佐木明希大嫂中文字幕全集 善良的小妻子字幕 公公在我洗碗时在厨房要了我 大嫂被肉翻了天佐佐木明希1 教师蕾丝短裙中文字幕 瓜棚里和大嫂乱禽 强睡大嫂中文字 免费