1.nyoj90

描述

将正整数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)。
输出
输出每组测试数据有多少种分法。
样例输入
1
6
样例输出
  11
【思路】
dp[i][j]代表整数i划分的所有数中最大数不超过j的划分数。
#include<bits/stdc++.h>  
using namespace std;  
int dp[15][15];  
int main()  
{  
    int n,m,i,j,t;  
    dp[1][1]=1;  
    for(i=1; i<=10; i++)  
        for(j=1; j<=10; j++)  
        {  
            if(j==1) dp[i][j]=1;  
            else if(i>j) dp[i][j]=dp[i-j][j]+dp[i][j-1];//含j和不含j  
            else if(i==j) dp[i][j]=1+dp[i][j-1];  
            else dp[i][j]=dp[i][i];  
        }  
    cin>>t;  
    while(t--)  
    {  
        scanf("%d",&n);  
        printf("%d\n",dp[n][n]);  
    }  
    return 0;  
}  
View Code

相关文章:

  • 2021-11-20
  • 2022-12-23
  • 2021-07-12
  • 2021-11-14
  • 2022-01-27
  • 2022-03-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-06
  • 2022-01-19
相关资源
相似解决方案