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

题干:

题目描述

将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5
1,5,1
5,1,1

问有多少种不同的分法。

输入输出格式

输入格式:

 

n,kn,k (6<n \le 2006<n≤200,2 \le k \le 62≤k≤6)

 

输出格式:

 

11个整数,即不同的分法。

 

输入输出样例

输入样例#1: 复制

7 3

输出样例#1: 复制

4

说明

四种分法为:
1,1,51,1,5;
1,2,41,2,4;
1,3,31,3,3;
2,2,32,2,3.

解题报告:

    这题也是今年十月份左右的时候清理工邀请赛的第二签到题。。当时想不到办法了直接dfs过的。偶然翻洛谷看到了原题、、见到了dp解法和母函数的解法。

   dfs很简单,做个简单的剪枝就好了,这是个看似o(200^6)但是实际上远远没有这么高复杂度的dfs。今天先补上dp的解法,母函数的以后复习的时候再说。

AC代码1:(dfs)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
ll dp[505][505];
int n,k;
void dfs(int last,int sum,int cur) {if(cur==k) {if(sum==n) cnt++;return;}for(int i=last; sum+i*(k-cur)<=n; i++) {//剪枝,只用枚举到sum+i*(k-cur)<=n为止dfs(i,sum+i,cur+1);}
}
int main()
{cin>>n>>k;dfs(1,0,0);cout << cnt <<endl;return 0 ;}

AC代码2:(dp)

dp[i][j]代表把i个小球放到j个盒子中的方法数。

一个简单的想法:以一个数为基准,逐步减少分割数 或 减少待分割数 。(这里选择1)

分为两种情况(因为是无序的所以认为每次都是划分完后所有球从小到大排序了)

a.至少有一个盒子只有一个小球的情况数

b.没有一个盒子只有一个小球的情况数

这样进行划分是因为这种分类可以使a和b都有能写出来的表达式:

a.因为盒子不加区分,那么1的情况数与“将n-1个小球放到k-1个盒子中”的情况数一样

b.没有一个盒子只有一个小球,那么把每个盒子中拿出来一个小球,对应的是“把(n-k)个小球放到k个盒子中的情况数”

这个b情况可以理解为:第一个数不为1时,可以视为先在所有的位置上都加上一个1再对于所有的位置用新的总数求次数,

所以定了的是占有了总数j个,位置仍然是j个,与原来相比没有变化。所以b情况的方案数=把i-j个球放到j个盒子中的方案数。

然后将上面的思路化为动态转移方程:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
ll dp[505][505];
int main()
{int n,k;for(int i = 1; i<=303; i++) /*dp[i][0] = */dp[i][1] = 1;//那一句到底有没有必要加啊,反正是这个状态用不到?dp[1][1] = 1;for(int i = 2; i<=303; i++) {for(int j = 2; j<=i; j++) {if(i-j >= 0) dp[i][j] = dp[i-1][j-1] + dp[i-j][j];//其实要是j<=i这么写的话这一行前面的那个if也可以不要了//else dp[i][j] = 0;}}cin>>n>>k;cout << dp[n][k]<<endl;return 0 ;}

总结:

   注意一下dp这里的数组不能开dp[505][25]这样,如果要这么写的话那就加上else也是错的,,因为你想啊i会遍历到300,那j也会跟着到300,所以会越界啊就修改别的数据了,,所以保险起见要么你在内层循环写上j<=min(k,i)或者min(15,i),要么就直接开个打数组来存这些没用的状态就好了嘛反正也是用不到的状态,,恰好也不会卡住空间,,干脆就开这么大好了。

题解https://www.luogu.org/problemnew/solution/P1025

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali linux 截图 软件,Kali-Linux-Tools-Interface:针对Kali Linux的图形化Web接口

Kali-Linux-Tools-Interface在当今这个信息时代&#xff0c;数据是最有价值的资产&#xff0c;因此&#xff0c;广大用户和企业已成为网络攻击的主要目标。众所周知&#xff0c;信息安全专业人员都会使用一系列技术工具来协助他们的活动。但是设置环境&#xff0c;安装这些工具…

【牛客 - 188D 】愤怒(01滚动数组优化dp,括号匹配方案个数,tricks)

题干&#xff1a; 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w想让分为的这两个括号序列同时合法 小w想知道一共有多少种划分方案 (划分的意思是划分为两个子序列) 注意两个序列是 A,B 和 两个序列是B,A 算两种方案,也就是同一位置位…

android adb 开机广播,Android中常用的adb指令

1、安装apkadb install filename.apk如:adb install C:\Users\zhijianhulian\Desktop\keystore\kingoroot.apk2、卸载apkadb uninstall apk包名如&#xff1a;adb uninstall com.kingoroot.cn3、启动activityadb shell am start -n 包名/activity完整包名地址如&#xff1a;adb…

ACM所有算法大全(持续更新)

转载自&#xff1a; http://blog.sina.com.cn/s/blog_adb6743801019h29.html ACM 所有算法 数据结构 栈&#xff0c;队列&#xff0c;链表哈希表&#xff0c;哈希数组堆&#xff0c;优先队列 双端队列 可并堆 左偏堆二叉查找树 Treap 伸展树并查集 集合计数问题 二分图的识别平…

android布局属性,Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline...

相信大家对LinearLayout已经相当熟悉&#xff0c;但你们是否了解它的属性baselineAligned呢&#xff1f;Android官方文档是这么描述的&#xff1a;那到底这个属性是做什么用的呢&#xff1f;baselineAligned:基准线对齐。首先要解释什么是基准线&#xff0c;这个在中文中不常见…

【CodeForces - 1105C】Ayoub and Lost Array(线性计数dp)

题干&#xff1a; Ayoub had an array aa of integers of size nn and this array had two interesting properties: All the integers in the array were between ll and rr (inclusive).The sum of all the elements was divisible by 33. Unfortunately, Ayoub has lost h…

【牛客 - 373C】抓捕盗窃犯(连通图,思维,dfs 或 并查集)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/373/C 来源&#xff1a;牛客网 Q市发生了一起特大盗窃案。这起盗窃案是由多名盗窃犯联合实施的,你要做的就是尽可能多的抓捕盗窃犯。 已知盗窃犯分布于 N N个地点,以及第 i i个地点初始有 ai ai名盗…

android取消自动调试模式吗,Android进入调试模式的三种技巧

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;Android开发过程中难免会遇到各种问题&#xff0c;通常我们会通过打印Log日志或者Debug模式来分析问题。这里介绍下Android程序进入到Debug的多种方式&#xff0c;…

IMX6怎么移植最新Android,[IMX6Q][Android5.1]移植筆記 --- 無法掛載system文件系統

platform: imx6qos: Android5.1branch: l5.1.1_2.1.0-ga編譯好system image之后開機提示如下log&#xff0c;注意紅色部分:Freeing unused kernel memory: 432K (c0be3000 - c0c4f000)usb 1-1: USB disconnect, device number 2Console: switching to colour dummy device 80x3…

【牛客 - 373A】翻硬币问题(博弈,结论,分析)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/373/A 来源&#xff1a;牛客网 Alice和Bob正在玩一个很经典的游戏。 有 n n个硬币初始时全部正面朝上&#xff0c;每一轮Alice必须选择其中任意的恰好 m m枚硬币并将它们全部翻转&#xff0c;如果若…

opera android 7,Opera迷你浏览器 Opera Mini 7

包名&#xff1a;com.opera.mini.android全新的界面Opera Mini 6在所有地方都有了全新的形象.新的设计、新的皮肤,还有新的缩放和跳转按键,这都让Opera Mini 6变得更加好用分享功能Opera Mini 6中你可以将感兴趣的内容分享到你所在社交平台中去触屏的双指缩放这次Opera也支持触…

【POJ - 1456】Supermarket (贪心,优先队列 或并查集)

题干&#xff1a; A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starting from the moment the sale begins. Each product takes precis…

【CodeForces - 558C】Amr and Chemistry(位运算,bfs,计数,思维,tricks)

题干&#xff1a; Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experiment. Amr has n different types of chemicals. Each chemical i has an initial volume of ailiters. For this experiment, Amr has to mix all th…

axure 转换为html,AxureRP教程AxureRP如何生成HTML文件

1.正常打开一份已经设计好的RP&#xff0c;如下截图所示&#xff1a;2.点击上方菜单的“发布”按钮&#xff0c;在弹出的选项中单击“生成HTML文件”&#xff0c;详细操作如下图标红位置。3.在弹出的新窗口中&#xff0c;可以设定HTML文件保存的文件夹位置&#xff0c;这个位置…

【牛客 - 373B】666RPG(线性计数dp)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/373/B 来源&#xff1a;牛客网 在欧美&#xff0c;“666”是个令人极其厌恶和忌讳的数&#xff0c;被称为“野兽数”。 相传&#xff0c;尼禄&#xff0c;这位历史上以暴君著称的古罗马皇帝&#xff0…

我家云刷android系统教程,我家云刷机教程——小白详细版(篇二)

#大男孩的快乐#征稿活动火热进行中。只要投稿就有50金币等你拿&#xff0c;更有三千元乐高大奖与达人Z计划专属权益等待优秀的你~>活动详情戳这里<前两天发了一篇我家云的刷机教程&#xff0c;没想到大家这么有兴趣&#xff0c;讨论的异常激烈。看了大家的评论才发现之前…

【Loj - 515】贪心只能过样例(暴力,或01背包 + bitset)

题干&#xff1a; 题目描述 输入格式 第一行一个数 n。 然后 n 行&#xff0c;每行两个数表示 ai​,bi​。 输出格式 输出一行一个数表示答案。 样例 样例输入 5 1 2 2 3 3 4 4 5 5 6 样例输出 26 数据范围与提示 解题报告&#xff1a; 注意到要求统计种类数&#xf…

html5文件域的自动获取,HTML5 文件域+FileReader 读取文件(一)

在HTML5以前&#xff0c;HTML的文件上传域的功能具有很大的局限性&#xff0c;这种局限性主要体现在如下两点&#xff1a;每次只能选择一个文件进行上传客户端代码只能获取被上传文件的文件路径&#xff0c;无法访问实际的文件内容一、FileList对象和File对象HTML5为typefile 的…

计算几何 模板

计算几何模板&#xff1a; #include<iostream> #include<algorithm> #include<queue> #include<cstdio> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #d…

html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div

我如何并排设置两个div,而下面的第三个div设置为这样.我当前的代码如下所示,将div放在name div之后Name6:30 PMNoteCSS&#xff1a;#contact_table_data {width:inherit;height:inherit;background-color:#99cc33;max-width:400px;}#info_div_name {width:auto;height:auto;pad…