NC51165. 自然数拆分Lunatic版
描述
输入描述
一个整数n。
输出描述
输出一个数,即所有方案数
因为这个数可能非常大,所以你只要输出这个数 mod 2147483648 的余数即可。
示例1
输入:
7
输出:
14
说明:
输入7,则7拆分的结果是
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
一共有14种情况,所以输出,即14
C++14(g++5.4) 解法, 执行用时: 43ms, 内存消耗: 376K, 提交时间: 2019-11-03 19:37:31
#include <stdio.h> unsigned int f[4001]; unsigned int p=2147483648; int main() { f[0]=1; int n; scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) f[j]=(f[j]+f[j-i])%p; printf("%u",f[n]>0?f[n]-1:p-1); }
C++ 解法, 执行用时: 27ms, 内存消耗: 432K, 提交时间: 2021-08-28 16:49:32
#include<bits/stdc++.h> using namespace std; long long dp[4010],a,mod=2147483648; int main(){ dp[0]=1; scanf("%d",&a); for(int i=1;i<a;i++){ for(int j=i;j<=a;j++){ dp[j]=(dp[j-i]+dp[j])%mod; } } cout<<dp[a]; }