HDU - 1028 Ignatius and the Princess III解题报告(线性dp)

题目大意:

给你一个数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;
    }
}
全部评论

相关推荐

昨天 14:09
已编辑
北京交通大学 算法工程师
字节跳动 训练框架研发 (N+2) * (12 + 3) 硕士211
Crinton:训练框架遥遥领先
点赞 评论 收藏
分享
12-16 22:45
已编辑
电子科技大学 活动运营
Rain_Codin...:简历感觉有点乱了而且一股AI味,AI简历的一个特点就是废话很多,一个点能分成四个点来讲,可以仔细优化一下。 btw,手机看简历不好看出来,可以把电脑上的简历截图放出来。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务