
算法设计与分析--C
ITarmi
记录学习过程,分享所学知识。认识更多志同道合的同学
展开
-
子集和问题-回溯算法-C++
题目描述:子集和问题的一个实例为<s,t>,其中,s={x1,x2,…xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在s的一个子集s1,使得s1中元素的和等于c。本题使用回溯法解决#include<iostream>#include<stdlib.h>using namespace std;#define max 100 int a...原创 2019-10-29 20:46:37 · 2754 阅读 · 0 评论 -
整数变换问题-回溯算法-C++
问题描述:整数i的两种变换定义为 f(i)=3i,g(i)=i/2(向下取整);设计一个算法求给定两个整数n和m,用最少次数的f 和 g变换将整数n变换为m;例如 :可以将整数15通过4次变换将它变成4,4=gfgg(15)。当整数n不可能转换为m时,算法应当怎么处理。本题是当出现重复数字,认为无法转换。代码如下:#include <iostream>#include<st...原创 2019-10-28 18:00:43 · 1318 阅读 · 0 评论 -
N皇后问题-回溯算法-C
问题描述:n皇后问题:在N行N列的棋盘上放置不能互相攻击的N个皇后。根据国际象棋规则,处在同一行或同一列或同一斜线上的皇后可以互相攻击。N皇后问题的解满足以下条件:棋盘每行均放置一个皇后,且任何2个皇后不在同一列,也不在同一斜线上。一般首先想到用二维数组进行求解,但因为皇后不能出现在同一行,所以本题,使用一维数组求解。回溯也需运用递归,深度搜索思想。满足条件就进行下一步,直到完成一种解法,或不...原创 2019-10-28 13:57:45 · 297 阅读 · 0 评论 -
符号三角形-回溯算法-C++
题目描述:符号三角问题:下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。(参考计算机算法设计与分析第五版-王晓东)代码如下:#include<iostream>#include<...原创 2019-10-27 17:11:28 · 3599 阅读 · 5 评论 -
删数问题-贪心算法-C
题目描述:给定一个高精度正整数a, 去掉其中k个数字后按原左右次序将组成一个新的正整数。对给定的a, k寻找一种方案,使得剩下的数字组成的新数最小。此题可用贪心算法进行求解具体思路:当k=1时,对于n位数构成的数删除哪一位,使得剩下的数据最小。删除满足如下条件的a[i]:它是第一个a[i]>a[i+1]的数,如果不存在则删除a[n]。当n>k>1,重复上述操作。每删除一个数...原创 2019-10-18 14:41:58 · 1674 阅读 · 0 评论 -
最大字段和问题-(动态规划,分治法,简单算法)--C
问题描述:给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如 的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。1.简单算法代码如下:#include<stdio.h>#include<stdlib.h>#define max 10int MUL(int *p){...原创 2019-10-11 14:35:20 · 11599 阅读 · 10 评论 -
计算矩阵连乘积-动态规划--c++
题目描述:在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。由该公式知计算C=AB总共需要pqr次的数乘。其标准计算公式为:现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要求计算出这n个矩阵的连乘积A1A2…An,最少的...原创 2019-10-07 12:55:28 · 819 阅读 · 0 评论 -
最长公共子序列问题-动态规划--C
题目描述:若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列...原创 2019-10-04 22:48:05 · 650 阅读 · 0 评论 -
棋盘覆盖问题-分治思想(基础版)--C
问题描述:在一个2k×2k (k≥0)个方格组成的棋盘中,有一个方格与其他不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4k种情形,因而对任何K>=0来说有4k种不同的棋盘。棋盘覆盖问题(chess cover problem)要求用4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。代码如下:#include<stdi...原创 2019-10-03 10:14:05 · 495 阅读 · 0 评论 -
编程求和:s=a+aa+aaa+aaaa+ „„+aaaa„aaa(n个)-C
**题目描述:**编程求和:s=a+aa+aaa+aaaa+ „„+aaaa„aaa(n个),其中a为1~9中的一个数字。 提示:若第一项为a , 以后每一项由前一项乘以10加上a递推得到,然后求和。此题为简单递归问题。代码如下:#include<stdio.h>#include<stdlib.h>int sum = 0;//定义一个全局变量保存算式的和,以免在递...原创 2019-09-22 16:13:11 · 973 阅读 · 0 评论