洛谷 P1025 数的划分
https://www.luogu.org/problemnew/show/P1025
本题有两种解法 dfs和dp
dfs
dfs很好理解 只是需要加上一个剪枝:
sums+i*(k-t)<=n
其实这个也是很容易理解的 因为我们为了避免重复 将循环从小到大进行 那么如果sums+i*(k-t)>n,说明后面的数肯定不满足条件
#include<bits/stdc++.h>using namespace std; int n,k,anss,sums;void dfs(int now,int t) {if(t==k){if(sums==n)anss++;return;}for(int i=now;sums+i*(k-t)<=n;i++){sums+=i;dfs(i,t+1);sums-=i;} }int main() {cin>>n>>k;dfs(1,0);cout<<anss<<endl; }
也可以把sums当作参数传进去:
#include<bits/stdc++.h>using namespace std; int n,k,anss;void dfs(int now,int t,int sums) {if(t==k){if(sums==n)anss++;return;}for(int i=now;sums+i*(k-t)<=n;i++)dfs(i,t+1,sums+i); }int main() {cin>>n>>k;dfs(1,0,0);cout<<anss<<endl; }
dp
这个不是很好想 我是抄的题解:
f[i][x] 表示 i 分成 x 个非空的数的方案数。
显然 i<x 时 f[i][x]=0 , i=x 时 f[i][x]=1;
其余的状态,我们分情况讨论:
①有1的 ②没有1的
第一种情况,方案数为 f[i-1][x-1]
第二种情况,方案数为 f[i-x][x] (此时 i 必须大于 x)
所以,状态转移方程为: f[i][x]=f[i-1][x-1]+f[i-x][x]
解释一下:
一个数字i被分成K份时,存在两种情况,一个是有一存在,如6分成三份的1 2 3;另一种是没有一存在,比如6分成三份的2 2 2;
如果有1存在,还是用6分三份举例,那么就是对5进行分两份的操作,再加上那个1;如果没有1存在,我们先将6变成(1+a)+(1+b)+(1+c);那么a+b+c=6-3=3;然后他们需要被分配到三个位置上从而防止1的出现——即【i-k】【k】
#include<bits/stdc++.h>using namespace std; long long int n,k,a[205][10],i,j; int main() {cin>>n>>k;for(i=1;i<=n;i++){a[i][1]=1;a[i][0]=1;}for(i=2;i<=k;i++){a[1][i]=0;a[0][i]=0;}for(i=2;i<=n;i++)for(j=2;j<=k;j++){if(i>j)a[i][j]=a[i-1][j-1]+a[i-j][j];elsea[i][j]=a[i-1][j-1];}cout<<a[n][k];}
转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/10953003.html
洛谷 P1025 数的划分相关推荐
- 洛谷 - P1025 数的划分(计数dp)
题目链接:点击查看 题目大意:将整数 n 分成 k 份有多少种分法 题目分析:设 dp[ i ][ j ] 为将整数 i 分成 j 份的方案数,拆分整数可以等价为放小球,相当于将 n 个小球放进 k ...
- 洛谷 - P1025 数的划分(dfs)
题目链接:点击查看 题目大意:给出两个数n和k,要求将n分成k份,问有多少种方案数,注意: 1 1 5和1 5 1还有5 1 1算同一种方案 题目分析:因为n只给到了200,并且k最大为6,所以直接d ...
- 洛谷——P1025 数的划分
https://www.luogu.org/problem/show?pid=1025 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分 ...
- 洛谷P3939 数颜色 vector乱搞
洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...
- *【洛谷 - P1025】数的划分(dfs 或 dp 或 母函数,第二类斯特林数Stirling)
题干: 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5 1,5,1 5,1,1 问有多少种不同的分法. ...
- 【洛谷P1255 数楼梯】
P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 看上去是个斐波那契数列,其实是高精度计算啦 虽说是个水题,但可以练习一下高精度计算,之前我都是顺序输入,通过指针偏 ...
- 洛谷 P1028 数的计算
递推计算即可 f[1]=1 f[2]=2=f[1]+1 f[3]=2=f[1]+1 f[4]=4=f[1]+f[2]+1 f[5]=4=f[1]+f[2]+1 我的代码(算法借鉴洛谷题解) #incl ...
- uoj#348/洛谷P4221 [WC2018]州区划分(FWT)
传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...
- 数的划分(洛谷-P1025)
题目描述 将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如: n=7 , k=3 ,下面三种分法被认为是相同的. 1,1,5 ; 1,5,1 ; 5,1,1 . 问有 ...
- 洛谷 P1255 数楼梯 70
题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例# ...
最新文章
- pip 升级之后提示 bash: /usr/bin/pip3: No such file or directory
- 毫米波雷达_毫米波雷达基础知识
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...
- python中的is
- 聚焦云原生,阿里云与 CNCF 共话「云未来,新可能」
- R语言入门4---R语言流程控制
- Python中都全局变量和局部变量
- Angular 下拉搜索框实现
- IOS开发(63)之GCD执行延迟操作
- Python爬虫都被你用来爬妹子图了,我等羞愧与之为伍!
- Treeview动态添加用户控件 取值和传值(第二种样式)
- 华为机试(6.17笔试题解析)
- wps桌面右键缺少新建文档入口
- SDCC讲师专访:创新工场蔡学镛为何看好Dart
- win7任务栏谷歌浏览器图标显示异常
- MFC学习篇:鸡啄米MFC教程字体格式设置函数解析
- 谷歌论文Weight Agnostic Neural Networks(WANN)权重无关神经网络
- GDUT——1169: Krito的讨伐(优先队列BFS)
- .NET AutoCAD二次开发之路(二、直线篇)
- MapReduce核心思想
热门文章
- scala学习笔记一------初步了解scala
- 每天10个Linux命令五
- MongoDB数据库读书笔记
- java8 json转xml,在Java中将JSON转换为XML
- java redis源码分析,慢谈 Redis 实现分布式锁 以及 Redisson 源码解析
- 区块链 xuperchain 同步模式 纯异步模式 异步阻塞模式 怎么启动
- Linux ubuntu centos 文件目录是什么意思
- php针探,php针探代码,这款针探可以检测你机器的(1/7)
- 基于springboot的贫困帮扶系统
- 动画效果之手机端实现垃圾桶效果