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 数的划分相关推荐

  1. 洛谷 - P1025 数的划分(计数dp)

    题目链接:点击查看 题目大意:将整数 n 分成 k 份有多少种分法 题目分析:设 dp[ i ][ j ] 为将整数 i 分成 j 份的方案数,拆分整数可以等价为放小球,相当于将 n 个小球放进 k ...

  2. 洛谷 - P1025 数的划分(dfs)

    题目链接:点击查看 题目大意:给出两个数n和k,要求将n分成k份,问有多少种方案数,注意: 1 1 5和1 5 1还有5 1 1算同一种方案 题目分析:因为n只给到了200,并且k最大为6,所以直接d ...

  3. 洛谷——P1025 数的划分

    https://www.luogu.org/problem/show?pid=1025 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分 ...

  4. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

  5. *【洛谷 - P1025】数的划分(dfs 或 dp 或 母函数,第二类斯特林数Stirling)

    题干: 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5 1,5,1 5,1,1 问有多少种不同的分法. ...

  6. 【洛谷P1255 数楼梯】

    P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 看上去是个斐波那契数列,其实是高精度计算啦 虽说是个水题,但可以练习一下高精度计算,之前我都是顺序输入,通过指针偏 ...

  7. 洛谷 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 ...

  8. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)

    传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...

  9. 数的划分(洛谷-P1025)

    题目描述 将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如: n=7 , k=3 ,下面三种分法被认为是相同的. 1,1,5 ; 1,5,1 ; 5,1,1 . 问有 ...

  10. 洛谷 P1255 数楼梯 70

    题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例# ...

最新文章

  1. pip 升级之后提示 bash: /usr/bin/pip3: No such file or directory
  2. 毫米波雷达_毫米波雷达基础知识
  3. sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...
  4. python中的is
  5. 聚焦云原生,阿里云与 CNCF 共话「云未来,新可能」
  6. R语言入门4---R语言流程控制
  7. Python中都全局变量和局部变量
  8. Angular 下拉搜索框实现
  9. IOS开发(63)之GCD执行延迟操作
  10. Python爬虫都被你用来爬妹子图了,我等羞愧与之为伍!
  11. Treeview动态添加用户控件 取值和传值(第二种样式)
  12. 华为机试(6.17笔试题解析)
  13. wps桌面右键缺少新建文档入口
  14. SDCC讲师专访:创新工场蔡学镛为何看好Dart
  15. win7任务栏谷歌浏览器图标显示异常
  16. MFC学习篇:鸡啄米MFC教程字体格式设置函数解析
  17. 谷歌论文Weight Agnostic Neural Networks(WANN)权重无关神经网络
  18. GDUT——1169: Krito的讨伐(优先队列BFS)
  19. .NET AutoCAD二次开发之路(二、直线篇)
  20. MapReduce核心思想

热门文章

  1. scala学习笔记一------初步了解scala
  2. 每天10个Linux命令五
  3. MongoDB数据库读书笔记
  4. java8 json转xml,在Java中将JSON转换为XML
  5. java redis源码分析,慢谈 Redis 实现分布式锁 以及 Redisson 源码解析
  6. 区块链 xuperchain 同步模式 纯异步模式 异步阻塞模式 怎么启动
  7. Linux ubuntu centos 文件目录是什么意思
  8. php针探,php针探代码,这款针探可以检测你机器的(1/7)
  9. 基于springboot的贫困帮扶系统
  10. 动画效果之手机端实现垃圾桶效果