数据结构&程序设计&算法
清小欢欢欢
浅浅一笑,亦是美好
展开
-
慕课-程序设计与算法(大学先修课)-郭炜-第七周练习题
1.输入一行字符,统计出其中数字字符的个数。#include <iostream>using namespace std;int main() { char ch; int count = 0; while( ch = getchar(), ch != '\n') //若读入的字符不是回车 { if(isdigit(ch)) //若是数原创 2017-03-17 15:12:25 · 1003 阅读 · 0 评论 -
分治之归并排序
描述: 数组的排序任务可以如下完成: 1)把前一半排序 2)把后一半排序 3)把两半归并到一个新的有序数组,然后再拷贝回原数组,排序完成#include<iostream>using namespace std;void Merge(int a[], int s, int m, int e, int tmp[]){ int pb = 0; int p1 = s, p2转载 2017-03-29 21:48:09 · 194 阅读 · 0 评论 -
动态规划之数字三角形
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径,三角形的行数大于1小于等于100,数字为0-99.输入:5//行数73 88 1 0转载 2017-03-30 11:00:31 · 261 阅读 · 0 评论 -
动态规划之最长上升子序列
问题描述: 对于给定的,如序列(1,7,3,5,9,4,8)有它的一些上升子序列,如(1,7)等,这些子序列中最长的长度是4,你的任务就是对于给定的序列,求出最长上升子序列的长度。 输入: 输入的第一行是序列的长度N(1<=N<=1000).第二行给出序列中的N个整数,这些整数的取值范围都在0到10000. 输出: 最长上升子序列的长度。#include<iostream>#includ转载 2017-03-30 16:51:49 · 219 阅读 · 0 评论 -
动态规划之最长公共子序列
描述: 给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。#include<iostream>#include<cstring>#include<algorithm>using namespace std;char sz1[1000];char sz2[1000];int maxLen[1转载 2017-03-30 21:38:13 · 231 阅读 · 0 评论 -
动态规划之最佳加法表达式
描述: 有一个由1···9组成的数字串,问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少。 解题思路: 设V(m,n)表示在n个数字中插入m个加号所能形成的表达式最小值,那么: if m=0 V(m,n)=n个数字构成的整数 else if nNULL原创 2017-03-31 10:25:30 · 690 阅读 · 0 评论 -
动态规划之Help Jimmy
描述:NULL 解题思路:if(板子K左端正下方没有别的板子){ if(板子k的高度h(k)大于Max) LeftMinTime(k)=无穷; else LeftMinTime(k)=h(k);}else if(板子k左端正下方的板子编号是m) LeftMinTime(k)=h(k)-h(m)+Min(LeftMinTime(m)+Lx(原创 2017-03-31 10:44:19 · 309 阅读 · 2 评论 -
动态规划之滑雪(百练1088)
描述:NULL 解题思路: 解法1):“人人为我”式递推 L(i,j)表示从点(i,j)出发的最长滑行长度。一个点(i,j),如果周围没有比它低的点,L(i,j)=1. 将所有点按高度从小到大排序。每个点的L值都初始化为1,从小到大遍历所有的点,经过一个点(i,j)时,用递推公式求L(i,j). 递推公式:L(i,j)等于(i,j)周围四个点中,比(i,j)低,且L值最大的那个点的L值,再原创 2017-03-31 11:09:06 · 633 阅读 · 0 评论 -
动态规划之神奇的口袋(百练2755)
描述:NULL 方法1) 递归#include<iostream>using namespace std;int a[30];int N;int Ways(int w, int k) {//从前k种物品中选择一些,凑成体积w的做法数目 if (w == 0) return 1; if (k <= 0) return 0; return Ways(w, k - 1)转载 2017-03-31 13:05:13 · 306 阅读 · 0 评论 -
动态规划之0-1背包问题(POJ3624)
有N件物品和一个容积为M的背包。第i件物品的体积w[i],价值是d[i]。求解将哪些物品装入背包可使价值总和最大。每种物品只有一件,可以选择放或者不放。(N<=3500,M<=130000)。 解题思路: 用F[i][j]表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和。 递推: F[i][j]=max(F[i-1][j],F[i-1][j-w[i]]+d[i]) 取或不取第原创 2017-03-31 15:07:55 · 372 阅读 · 0 评论 -
动态规划之分蛋糕
描述: 有一块矩形蛋糕,宽和高分别是整数w、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且宽和高均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。请计算:最后得到的m块蛋糕中,最大的那块蛋糕的面积下限。 递推式: SV为第一刀竖着切时能得到的最好结果,SH为第一刀横着切时能得到的最好结果,则ways(w,h,m)=min(SV,SH) SV=min{Si,i=1…w-1}原创 2017-03-31 15:31:45 · 2006 阅读 · 2 评论 -
深度优先搜索之城堡问题
#include<iostream>#include<stack>#include<cstring>#include<algorithm>using namespace std;int R, C;int rooms[60][60];int color[60][60];int maxRoomArea = 0, roomNum = 0;int roomArea;void Dfs(in转载 2017-03-31 21:41:02 · 411 阅读 · 0 评论 -
分治之求排列的逆序数
描述: 一个排列含有逆序的个数称为这个排列的逆序数。例如排列263451含有8个逆序(2,1),(6,3),(6,4),(6,5),(6,1),(3,1),(4,1),(5,1),因此该排列的逆序数就是8. 现给定1,2,3,……,n的一个排列,求他的逆序数。空原创 2017-03-29 20:50:59 · 765 阅读 · 0 评论 -
分治之输出前m大的数
描述: 给定一个数组包含n个元素,统计前m大的数,并且把这m个数从大到小输出。 输入: 第一行包含一个整数n,表示数组的大小,n<100000。 第二行包含n个整数,表示数组的元素,整数之间以一个空格隔开。每个整数的绝对值不超过100000000. 第三行包含一个整数m,m空原创 2017-03-29 20:46:21 · 506 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第六周练习题
1.Pell数列a1, a2, a3, …的定义是这样的,a1 = 1, a2 = 2, … , an = 2 * an − 1 + an - 2 (n > 2)。 给出一个正整数k,要求Pell数列的第k项模上32767是多少。#include<iostream>using namespace std;unsigned int s[1000000];unsigned int w[10000原创 2017-03-17 15:07:49 · 998 阅读 · 1 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第五周练习题
1.输出一个整数序列中与指定数字相同的数的个数。#include<iostream>#include<math.h>using namespace std;int s[101];int main(){ int m,n,count=0; cin>>m; for(int i=0;i<m;++i) { cin>>n; s[i]=n原创 2017-03-17 15:03:06 · 1127 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第四周练习题
1.所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。 程序要求输入一个整数,将经过处理得到1的过程输出来。#include<iostream>#include<math.h>using namespace std;int main(){原创 2017-03-17 14:57:39 · 1865 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第三周练习题
1.给定一个整数,判断该数是奇数还是偶数。#include<iostream>using namespace std;int main(){ long int a; cin>>a; if(a%2==0) cout<<"even"; else cout<<"odd"; return 0;}2.利用公式x1= (-b + s原创 2017-03-17 14:51:46 · 1180 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第二周练习题
1.读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们。#includeusing namespace std;int main(){ long int a,b,c; scanf("%ld%ld%ld",&a,&b,&c); printf("%8d %8d %8d",a,b,c); return 0;}2.读入一个双精度浮点数,保留12位小数,输出这个浮点数。原创 2017-03-17 11:39:15 · 1557 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第一周练习题
1.输入三个整数,把第二个输入的整数输出。#includeusing namespace std;int main(){int a,b,c;cin>>a>>b>>c;coutbendl;return 0;}2.给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。#includeusing namespace std;int main()原创 2017-03-17 11:36:32 · 1745 阅读 · 0 评论 -
慕课-程序设计与算法(大学先修课)-郭炜-第八九周练习题
1.下面程序片段的输出结果是 Hello ,请填空#include <iostream>using namespace std;int main() { char s[] = "Hello"; char * p; for(p=s;*p!=NULL;p++) cout << * p ; return 0;}2.下面程序输出结果是 Tesla T原创 2017-03-24 18:58:03 · 2186 阅读 · 1 评论 -
枚举之特殊密码锁
题目:有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。 输入:两行,给出两个由0、1组成的等长字符串转载 2017-03-24 15:08:59 · 849 阅读 · 0 评论 -
枚举之熄灯问题
题目:有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。请你写一个程序,确定需要按下哪些按钮,恰好使得所有的灯都熄灭。#inclu转载 2017-03-23 18:41:18 · 494 阅读 · 0 评论 -
递归之波兰表达式(前缀表达式)
2 + 3 表示为 + 2 3 ( 2 + 3 )* 4 表示为* +2 3 4 本题求解波兰表达式的值,其中运算符包括+ - * / 四个。 输入:输入为一行,其中运算符和运算数之间都用空格分开,运算数是浮点数; 输出:输出为一行,表达式的值。#include<cstdio>#include<iostream>#include<cstdlib>using namespace std;转载 2017-03-28 15:58:51 · 768 阅读 · 0 评论 -
分治之快速排序
取数组中首尾两个数作比较,按一定规则交换#include<iostream>using namespace std;void swap(int & a, int & b){ int tmp = a; a = b; b = tmp;}void QuickSort(int a[], int s, int e){ if (s > e) retur转载 2017-03-29 19:27:53 · 162 阅读 · 0 评论 -
深度优先搜索之踩方格(百练4982)
思路: 递归 从(i,j)出发,走n步的方案数,等于以下三项之和: 从(i+1,j)出发,走n-1步的方案数。前提:(i+1,j)还没走过; 从(i,j+1)出发,走n-1步的方案数。前提:(i,j+1)还没走过; 从(i,j-1)出发,走n-1步的方案数。前提:(i,j-1)还没走过;转载 2017-04-05 18:19:23 · 576 阅读 · 0 评论