HDU

来源:互联网 发布:网络b类违规是什么意思 编辑:程序博客网 时间:2024/06/01 09:57

题目大意:

给你一个数n,定义:把n表示成若干个数的和的形式焦作n的一种划分。问你这个n一共有多少种划分方法。(1<=n<=120)

分析:

dp建立:

状态:

dp [ i ] [ j ] 表示对 i 的划分方式中最小的数是 j 的划分方式数。

转移方程:

dp[i][j]=dp[ij][j]+dp[ij][j+1]+....+dp[ij][ij]

边界条件:

dp[t][t]=11<=t<=n

代码:

#include<iostream>using namespace std;int a[200]={0};int dp[200][200]={0};void init(){    for(int i=1;i<=120;i++)    {        for(int j=1;j<i;j++)        {            for(int k=0;k<=i-2*j;k++)            {                dp[i][j]=dp[i][j]+dp[i-j][j+k];            }        }        dp[i][i]=1;    }}int main(){    int n;    init();    while(cin>>n)    {        int s=0;        for(int i=1;i<=n;i++)        {            s+=dp[n][i];        }        cout<<s<<endl;    }}
原创粉丝点击