【51NOD】1201 整数划分
【题意】将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 整数划分相关推荐
- 51nod 1201:整数划分 超级好的DP题目
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...
- C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分
参考博客:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1192308.html 1.整数划分为连续整数: 如将15划分为连续整数之和: 15 ...
- 算法笔记——整数划分1
题目来源:NYOJ90 问题描述: 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个 ...
- Acwing900. 整数划分[计数类dp]:完全背包解法
文章目录 题目分析 完全背包解法 题目链接 题目分析 完全背包解法 请复习完全背包模板完全背包dp优化内有完整标准完全背包的推导过程 状态表示: f[i][j]f[i] [j]f[i][j] 表示从 ...
- 4.1 基础-放苹果(整数划分)
题目 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 每个用例包含二个整数M和N.0<=m ...
- hdu 5230(整数划分,dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5230 解题思路: 这是一个整数划分的模型: 将n划分为k个整数的划分数 设dp[i][j]为将i划分为 ...
- 整数划分递归相关问题
算法设计----整数划分递归相关问题 一.原问题 整数划分,是指把一个正整数n写成如下形式: 假设整数n,能被划分为i段n=a1+a2+...ai,其中ak为n中划分的最大整数(1<=ak< ...
- NYOJ176 整数划分(二)
整数划分(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 1 ...
- Gym - 100952H--H. Special Palindrome--dp整数划分(模板)
题目地址 A sequence of positive and non-zero integers called palindromic if it can be read the same forw ...
最新文章
- vuex中组合action的使用
- 使用python的while语句,编写简单门票与年龄计算器
- ToString() 会发生装箱吗?
- java鼠标经过时变色_鼠标经过时单元格变色
- Hadoop HA 深度解剖
- c#带参数和返回值的函数 开启线程调用的方法
- pyspark:basic_operating_1
- JDBC连接池原理及分析
- 下载离线aptana的eclipse插件
- 嵌入式单片机基础篇(十九)之一般TFTLCD 模块的使用流程
- backtracking line Serach
- 关于功能结构图 信息结构图 产品结构图那点小事
- 数据库脏读、事务的四大特性、四大隔离级别、三大范式
- NB-IOT的背景基础知识
- pandas中Series的apply函数
- Qt字符转换、文件操作、加密、电脑操作
- Android模拟电子墨水屏,彩色电子墨水屏手机海信A5proCC使用体验
- 计算体质指数BMI的java程序,如何正确的计算体质指数BMI。
- JavaEE - Tomcat和HTTP协议
- 明明装了驱动,当前打印机不可用,怎么办?