
递归
ComBoat
俺好菜呀o(╥﹏╥)o
展开
-
HDU 2553 N皇后问题(dfs)
Problem Description在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。Input共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。Output共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。Sample Input1850Sample Output19210思路详见 N皇后原创 2021-02-17 21:47:58 · 167 阅读 · 0 评论 -
OpenJudge 7622 求排列的逆序数
描述在Internet上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计他(或她)对各种不同信息的兴趣,从而实现个性化的服务。对于不同的排名结果可以用逆序来评价它们之间的差异。考虑1,2,…,n的排列i1,i2,…,in,如果其中存在j,k,满足 j < k 且 ij > ik, 那么就称(ij,ik)是这个排列的一个逆序。一个排列含有逆序的个数称为这个排列的逆序数。例如排列 263451 含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(原创 2021-02-09 16:48:33 · 330 阅读 · 0 评论 -
快速排序
从待排数组中选出一个数,将小于它的放到一边,大于它的放到另一边,再对这两边分别进行快速排序,持续递归,直到排序的只剩一个元素时间复杂度O(nlogn)单向扫描 #include<iostream>using namespace std; int partition(int *a,int l,int r){ int pivot=a[l]; int left=l+1; int right=r; while(left<=right) { if(a[left]<=原创 2021-02-08 18:41:17 · 96 阅读 · 0 评论 -
归并排序
先将前半部分排序,再将后半部分排序,最后将两部分合并递归实现,直到一部分只有一个元素时间复杂度O(nlogn)代码#include<iostream>using namespace std;int temp[100];void merge(int *a,int left,int mid,int right){ for(int i=left;i<=right;i++) temp[i]=a[i]; //先将a整体赋给temp int l=left,r=原创 2021-02-08 18:03:40 · 123 阅读 · 1 评论 -
OpenJudge 7215 简单的整数划分问题(递归、dp)
描述将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于每组测试数据,输出N的划分数。样例输入5样例输出7思路使用递归实现。假设f(n,m)表示将n划分为多个不大于m的数当n=1,只有一种当m原创 2021-02-07 16:52:15 · 560 阅读 · 0 评论 -
HDU 2106 Boolean Expressions
DescriptionThe objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:Expression: ( V | V ) & F & ( F | V )where V is for True, and F is for False. The expressions may include the following ope原创 2021-02-06 21:52:10 · 121 阅读 · 0 评论 -
OpenJudge 2787 算24
描述给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。输入输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表原创 2021-02-06 18:23:40 · 246 阅读 · 0 评论 -
OpenJudge 666 放苹果
描述把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。输入第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。输出对输入的每组数据M和N,用一行输出相应的K。样例输入17 3样例输出8思路f(m,n)将m个苹果放进n个盘子首先,先考虑盘子数大于苹果数,那肯定有n-m个盘子必为空,因为每一个盘子和苹果看作都是相同原创 2021-02-06 16:44:12 · 460 阅读 · 0 评论 -
OpenJudge 8758 2的幂次方表示
描述任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=22+2+20(21用2表示)3=2+20所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=210+28+25+2+1所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)输入一个正原创 2021-02-04 11:08:52 · 272 阅读 · 0 评论 -
OpenJudge 2748 全排列
描述给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。输入输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:已知S = s1s2…sk , T = t1t2…tk,则S < T 等价于,存在p (1 &原创 2021-02-04 10:05:36 · 592 阅读 · 0 评论 -
OpenJudge 2694 逆波兰表达式
OpenJudge 2694 逆波兰表达式描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。输入输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。输出输出为一行,表达式的值。可直接用printf("%f\n", v)输出表达式的值v。原创 2021-02-03 22:01:06 · 238 阅读 · 0 评论 -
N皇后问题
N皇后问题递归实现注释在代码中代码#include<iostream>#include<cmath>using namespace std;int n;int pos[101]; //用于储存位置 void npos(int k) //在k之前的皇后已经摆好的前提下,摆第4个 { if(k==n+1) //注意条件,n个都已经摆好,终止条件是要摆n+1 { for(int i=1;i<=n;i++) cout&原创 2021-02-03 21:26:46 · 102 阅读 · 0 评论