zoukankan      html  css  js  c++  java
  • 2019.9.27 自然数的拆分

    题目描述

    给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。求拆分的方案数mod 2147483648的结果。1≤N≤4000。 

    输入
    一个整数n。
    输出

    输出一个数,即所有方案数 
    因为这个数可能非常大,所以你只要输出这个数 mod 2147483648 的余数即可。 

    样例输入
    7
    样例输出
    14
    提示

    7的拆分一共有14种情况 

    7=1+6 

    7=1+1+5 

    7=1+1+1+4 

    7=1+1+1+1+3 

    7=1+1+1+1+1+2 

    7=1+1+1+1+1+1+1 

    7=1+1+1+2+2 

    7=1+1+2+3 

    7=1+2+4 

    7=1+2+2+2 

    7=1+3+3 

    7=2+5 

    7=2+2+3 

    7=3+4 


    简单dp,注意只需要先枚举物品再枚举容量即可。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define int long long
    #define mod 2147483648
    using namespace std;
    int n,dp[100050];
    signed main()
    {
    	scanf("%lld",&n);
    	dp[0]=1;
    	for(int i=1;i<n;i++)
    	{
    		for(int j=i;j<=n;j++)
    		{
    			dp[j]=(dp[j]+dp[j-i])%mod;
    		}
    	}
    	printf("%lld",dp[n]);
    	return 0;
    }
    

      

    /*====年轻人,瞎搞是出不了省一的,这就是现实====*/
  • 相关阅读:
    2.4 学习总计 之 自己实现底部导航
    2.3 学习总结 之 分页查询
    2.2 学习总结 之 servlet 的两次抽取
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
  • 原文地址:https://www.cnblogs.com/qxds/p/11599771.html
Copyright © 2011-2022 走看看