【题意】将n划分成不同正整数的和的方案数。

【算法】动态规划

【题解】

暴力:f[i][j]:只用前1..i的数字,总和为j的方案数

本质上是01背包,前i个物体,总质量为j的方案数

f[i][j]=f[i-1][j]+f[i-1][j-i]

复杂度O(n^2)

优化:

我们发现,因为要求数字不同,那么数字最多也小于sqrt(n*2)个。

极端情况:1+2+3+...+mx=n mx<sqrt(n*2)

所以可以改一下状态的设计

f[i][j]:用了i个数字,总和为j的方案数。

转移状态:

①如果i个数里没有1:那么把i个数字都-1,就对应“取了i个数字,总和为j-i”的,i个数都+1

②i个数字里有1:对应"取了i-1个数字,总和为j-i"的情况,再加一个新的数字1,其他i-1个数也都+1啊

f[i][j]=f[i-1][j-i]+f[i][j-i]

初始状态f[0][0]=1

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=50010;
const long long MOD=1000000007;
int f[350][maxn],n;
int main()
{scanf("%d",&n);f[0][0]=1;for(int i=1;i*i<=n*2;i++)for(int j=1;j<=n;j++)if(j-i>=0)f[i][j]=(f[i-1][j-i]+f[i][j-i])%MOD;long long ans=0;for(int i=1;i*i<=n*2;i++)ans=(ans+f[i][n])%MOD;printf("%lld",ans);return 0;
}

View Code

总结一下几种情况:

1.$f_{n,m}$表示将数字n分成m个非负整数的方案。

$$f_{i,j}=f_{i,j-1}+f_{i-j,j}$$

如果方案中有0就去掉,否则整体-1。

2.$f_{n,m}$表示将数字n分成m个正整数的方案。

$$f_{i,j}=f_{i-1,j-1}+f_{i-j,j}$$

如果方案中有1就去掉,否则整体-1。

3.$f_{n,m}$表示将数字n分成m个不同正整数的方案数。

$$f_{i,j}=f_{i-j,j-1}+f_{i-j,j}$$

强制递增,如果方案第一位是1那么去掉后整体-1,否则整体-1。

转载于:https://www.cnblogs.com/onioncyc/p/6295938.html

【51NOD】1201 整数划分相关推荐

  1. 51nod 1201:整数划分 超级好的DP题目

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...

  2. C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分

    参考博客:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1192308.html 1.整数划分为连续整数: 如将15划分为连续整数之和: 15 ...

  3. 算法笔记——整数划分1

    题目来源:NYOJ90 问题描述: 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个 ...

  4. Acwing900. 整数划分[计数类dp]:完全背包解法

    文章目录 题目分析 完全背包解法 题目链接 题目分析 完全背包解法 请复习完全背包模板完全背包dp优化内有完整标准完全背包的推导过程 状态表示: f[i][j]f[i] [j]f[i][j] 表示从 ...

  5. 4.1 基础-放苹果(整数划分)

    题目 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m ...

  6. hdu 5230(整数划分,dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5230 解题思路: 这是一个整数划分的模型: 将n划分为k个整数的划分数 设dp[i][j]为将i划分为 ...

  7. 整数划分递归相关问题

    算法设计----整数划分递归相关问题 一.原问题 整数划分,是指把一个正整数n写成如下形式: 假设整数n,能被划分为i段n=a1+a2+...ai,其中ak为n中划分的最大整数(1<=ak< ...

  8. NYOJ176 整数划分(二)

    整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 1 ...

  9. Gym - 100952H--H. Special Palindrome--dp整数划分(模板)

    题目地址 A sequence of positive and non-zero integers called palindromic if it can be read the same forw ...

最新文章

  1. vuex中组合action的使用
  2. 使用python的while语句,编写简单门票与年龄计算器
  3. ToString() 会发生装箱吗?
  4. java鼠标经过时变色_鼠标经过时单元格变色
  5. Hadoop HA 深度解剖
  6. c#带参数和返回值的函数 开启线程调用的方法
  7. pyspark:basic_operating_1
  8. JDBC连接池原理及分析
  9. 下载离线aptana的eclipse插件
  10. 嵌入式单片机基础篇(十九)之一般TFTLCD 模块的使用流程
  11. backtracking line Serach
  12. 关于功能结构图 信息结构图 产品结构图那点小事
  13. 数据库脏读、事务的四大特性、四大隔离级别、三大范式
  14. NB-IOT的背景基础知识
  15. pandas中Series的apply函数
  16. Qt字符转换、文件操作、加密、电脑操作
  17. Android模拟电子墨水屏,彩色电子墨水屏手机海信A5proCC使用体验
  18. 计算体质指数BMI的java程序,如何正确的计算体质指数BMI。
  19. JavaEE - Tomcat和HTTP协议
  20. 明明装了驱动,当前打印机不可用,怎么办?

热门文章

  1. 面试官:能不能手写一个 Promise?
  2. jQuery事件绑定(一)
  3. 【Alpha】开发日志Day8-0719
  4. Linux操作系统基础解析之(五)——grep命令家族及正则表达式初识
  5. Mark Down 使用实例
  6. Quartus DSE 初步应用
  7. 飞了,飞了,真的疯了
  8. osi参考模型(开放系统互连参考模型)
  9. Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)
  10. JIL 编译与 AOT 编译