洛谷 题解 P1025 【数的划分】】的更多相关文章

将n个小球放到k个盒子中的情况总数 = (a)至少有一个盒子只有一个小球的情况数 + (b)没有一个盒子只有一个小球的情况数 这样写出表达式: a.因为盒子不加区分,那么=情况数与"将n-1个小球放到k-1个盒子中"的情况数相同 b.没有一个盒子只有一个小球,那么就把每个盒子中拿出来一个小球,对应的是"把(n-k)个小球放到k个盒子中的情况数" 然后将上面的思路化为递归式: 设f(n, k)代表将n个小球放到k个盒子中且没有空盒的情况,那么f(n, k) = f(n…
P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; 为了确保出现过的方案不重复,…
P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; noip2001年提高组第二题…
P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i-j][j].初始化f[i][i]=1 #include<iostream> using namespace std; ][]; int n,k; int main() { cin>>n>>k; ;i<=n;i++) f[i][i]=; ;i<=n;i++) ;…
洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数.(不同位置的数字一样的数对算不同的数对) 输入输出格式 输入格式: 第一行包括2个非负整数N和C,中间用空格隔开. 第二行有N个整数,中间用空格隔开,作为要求处理的那串数.…
P1025 数的划分 学傻了,学傻了,什么dp搜索什么啊: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,k; int sum; void dfs(int x,int s,int num) { ) { sum++; return ; } for(int i=x;i<=s/num;i++) { dfs(i,s-i,num-); } } int mai…
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 否则先手必败. #include<stdio.h> #include<string.h> using namespace std; const int maxn = 25; int a[maxn], n, ans…
P1025数的划分 #include <iostream> using namespace std; int n,k; int cnt; void dfs(int s,int step,int sum) //s表示数字,第一个开头的数字,step表示当前记录数字的个数,sum表示数字和 { if(step == k){ if(sum == n) cnt++; return; } for(int i = s; sum + i * (k - step) <= n; i++) //i表示当前的…
洛谷P3166:https://www.luogu.org/problemnew/show/P3166 思路 用组合数求出所有的3个点组合(包含不合法的) 把横竖的3个点共线的去掉 把斜的3个点共线的去掉(枚举所有的矩阵把每个矩阵的对角线去掉) 每一条对角线可以取得首尾两点有(n-i)*(m-j)*2种方式可以选择 每一条对角线除了首尾两个点之外可以取到中间点有gcd(i,j)-1个 因此有对于每个条对角线有gcd(i,j)-1种要去掉(相似三角形) 代码 #include<iostream>…
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include<cstdio> #include<cstring> #include<iomanip> #include<algorithm> using namespace std; ][];//霸气的开始潇洒自信 ; ,m=-; void ac(int x,int y) {…
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版--------------------- 弱化版 实际只是把矩阵行数改成两行而已 sol:先排序,后考虑一个序列a[1]+b[1],a[2]+b[1],a[3]+b[1],······,a[n-1]+b[1],a[n]+b[1]; 显然对于上一个序列而言 a[1]+b[1]<=a[1]+b[2], a[2]+b[1]<…
题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整数,一个差值C,要求在这N个整数中找两个数A 和B,使得A-B=C,问这样的方案有多少种? 例如:N=5,C=2,5 个整数是:2 2 4 8 10.答案是3.具体方案:第3 个数减第1 个数:第3 个数减第2 个数:第5 个数减第4 个数. 输入输出格式 输入格式: 第一行2 个正整数:N,C.…
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 LibreOJ #141034 #2359. 「NOIP2016」天天爱跑步 Accepted 100 2454 ms 72492 KiB C++ / 6.3 K hkxadpall 2018-07-28 16:12:23 Vijos 5b5c3486d3d8a169f1b83bb0  P2004 天天爱跑步…
洛谷题面传送门 神仙多项式+组合数学题,不过还是被我自己想出来了( 首先对于两棵树 \(E_1,E_2\) 而言,为它们填上 \(1\sim y\) 使其合法的方案数显然是 \(y\) 的 \(E_1\cap E_2\) 的连通块次方,又显然 \(E_1,E_2\) 的导出子图是一棵森林,因此 \(E_1\cap E_2\) 连通块个数就是 \(n-|E_1\cap E_2|\),因此我们要求的答案就是 \(\sum\limits_{E_1}\sum\limits_{E_2}y^{n-|E_1\…
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=3064 分析 其实我是在看吉司机线段树课件时看到这题很感兴趣就跑过来做 显然如果数据小一点可以用分块什么的比较好搞 但是这个数据范围可能用\(log N\)的数据结构更舒服一点 怎么搞呢?请阅读国家集训队2016论文集之<区间最值操作与历史最值问题--杭州学军中学 吉如一>,对,就是我们敬爱可亲的吉…
链接:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2820 链接:https://www.luogu.org/problem/P1025 题意:将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 思路一:可开for暴力,在搜索的过程中进行剪枝,并且可以计算得,最小的数不会大于200/6,即n/k,可以在第一层循环里修改:for(int i=1;i<=n/k;i++) //保证i<=j<=k<=o<…
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; 代码 #include<iostream>…
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; 暴搜. 可以加一点剪枝,比如说当剩余数不够均分成剩余…
将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的. 1,1,51,1,5; 1,5,11,5,1; 5,1,15,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,…
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; #include<iostream> #…
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1. 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n≤200,2≤k≤6) 输出格式: 1个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为: 1,1,5; 1,2,4; 1,3,3; 2,2,3. import java.io.BufferedReader; i…
我觉得几乎就是一道最小生成树模板啊... 题解里许多大佬都说选第n-k+1条边,可我觉得要这么讲比较容易理解 (虚边为能选的边,实边为最小生成树) 令n=5,k=2,(1,3)<(1,2)<(3,4)<(4,5)(PS:(4,5)<(2,5),图画错了,见谅) 然后开始分部落(被同一个三角形套住的为一个部落的): (1) 这样肯定不为最优部落划分,因为他们的距离为(1,3) (2) 同理,这样也不行 (3) 这样当然是不行的 所以,我们得出了这样一个结论: 要尽量选大边 所以小边要…
题目链接:https://www.luogu.com.cn/problem/P1037 题目描述 给出一个整数 \(n(n<10^{30})\) 和 \(k\) 个变换规则 \((k \le 15)\) . 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:\(n=234\).有规则(\(k=2\)): \(2\)->\(5\) \(3\)->\(6\) 上面的整数\(234\)经过变换后可能产生出的整数为(包括原数): \(234\) \(534\) \(264\) \…
题目链接:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,-,x_n\) ,以及 \(1\) 个整数 \(k(k<n)\) . 从 \(n\) 个整数中任选 \(k\) 个整数相加,可分别得到一系列的和. 例如当 \(n=4,k=3\) , \(4\) 个整数分别为 \(3,7,12,19\) 时,可得全部的组合与它们的和为: \(3+7+12=22\) \(3+7+19=29\) \(7+12+19=38\)…
链接 https://www.luogu.org/problemnew/show/P2426 念念碎 第一次接触到区间DP(瑟瑟发抖) 所以象征性地看了一下题解 这好像是一道比较基础的区间DP吧 但是蒟蒻我还是不会啊 思路 因为是连续删除一段数字所以明显是区间DP 我们不妨设f[i][j]为从i开始删除j个数字 所以我们可以得到两种方案为:一起删去或者从中间某个数字分成两半分别删去 于是就得到了状态转移方程:f[i][j]=max(f[i][j],f[i][k]+f[i+k][j-k]) 开始敲…
P1102 A-B 数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A-B=C 的数对的个数.(不同位置的数字一样的数对算不同的数对) 输入格式 第一行包括2个非负整数N和C,中间用空格隔开. 第二行有N个整数,中间用空格隔开,作为要求处理的那串数. 输出格式 输出一行,表示该串数中包含的所有满足A-B=C的数对的个数. 输入输出样例 输入 #…
题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的话队首再走回来并去掉所有的值那么你就输了. 因为大家都绝对聪明,所以会选择将走过的边全部取完. 那么现在就面临着一个问题,你一开始要么往左走,要么往右走. 所以需要记录一下往左走的边数和往右走的边数,只要有一条路的边数是奇数,则先手赢:如果两条边都是偶数,则奇数赢. 实现代码如下: #include…
**原题链接** 题目描述 设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613 输入描述: 第一行,一个正整数n. 第二行,n个正整数. 输出描述: 一个正整数,表示最大的整数 分析: 要用一组正整数组成一个最大的多位整数,很自然的想到给这组正整数 按字典序排序,然后按字典序从大到小把这组正整数连接起来. 但,我…
传送门 # 4.24一个重要的日子.我人生中第一道7个测试点下载了5个的题目被我发现了,第一次用光下载数据点机会,真心坑点重重. 这题是一道很经典的贪心题目,可能是因为我太蒻了,导致我一直以为最少普及难度. 我用了几乎从未用过的"指针"(加这->  ""  <-个的原因是这个“指针”是模拟指针): 这个题的贪心策略应该都明白:找第一个开始下降的那个数删,如果一直上升删最后一个.原理就不解释了: 这个题每个字符设一个指针,指向他的下一个(不是下一个字符而是…
题目 这是一道简单的搜索题,考查的还是比较基础的东西,其时搜索有时候并不难写,主要是要想到怎么搜.比如这个题,如果想二维四个方向搜则没有头绪,反之因为搜索是用递归实现的,所以我们可以使用递归的特性,把大问题处理成小问题来解决. 所以我们可以用处理每一行的形式,把这一行的最大值求出来,再接着向下一行搜,中途再加上回溯操作,这道搜索就做完了. \(Code\) #include <iostream> #include <cstdio> #include <algorithm>…