- 博客(7)
- 收藏
- 关注
原创 动态规划 0/1背包问题 (Java)
使用动态规划算法求解0/1背包问题 注意和背包问题进行区分,0/1背包表示此物品只有两种情况:装入1和不装入0,且容量均为整数 import java.util.Scanner; public class Knapsack { public static void main(String[] args) { int n=4;//物品的个数n; int Volume,KnapsackVol=4;//背包的容量KnapsackVol=4; Scanner scan=new Scanner(System.i
2021-05-12 16:30:46
229
原创 第三章动态规划 矩阵连乘问题
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。将矩阵连乘积简记为A[i:j] ,这里i≤j, 考察计算A[i:j]的最优计算次序。设这个计算次序在矩阵Ak和Ak+1之间将矩阵链断开,i≤k<j。 计算量:A [ i : k ]的计算量加上A [ k+1: j ] 的计算量,再加上A[i:k]和A[k+1:j]相乘的计算量。 例题: 设要计算矩阵连乘乘积A1A2A3A4..
2021-05-07 21:12:08
1225
原创 PTA 整型关键字的散列映射
7-42 整型关键字的散列映射 (25 分) 给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key) = Key % P将关键字映射到长度为P的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。 输出格式: 在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。 输入样例: 4 5 24 15 6
2021-04-23 19:14:32
336
原创 期望为线性时间的选择算法(随机)
C++代码如下:(如有错误望友友们指正,万分感谢) 期望为线性时间的选择算法 #include<iostream> using namespace std; //number = rand() % (MAX_VALUE - MIN_VALUE + 1) + MIN_VALUE; int Randompartion(int *a,int p,int r)//和快排的Partition类似,只不过使用了rand()获取随机数 { int i=rand()%(r-p+1)+p;//获取随机
2021-04-23 16:22:57
114
原创 基数排序 C++
C++代码如下(仅练习使用,若有错误,望友友们指正,多谢!) #include<iostream> using namespace std; int getKNum(int a,int k)//获取个十百位上的值 { int n=a; int t=1; for(int j=1;j<=k;j++) { t*=10; } int x=(a/t)%10; return x; } void CountSort(int *a,i
2021-04-23 16:20:14
295
原创 例2-5整数划分问题
整数划分问题 n为整数和,n1为最大的加数,将最大加数n1不大于m的划分个数记作Divide(n,m); 代码如下: #include<iostream> using namespace std; int Divide(int n,int m) { if(n==0||m==0) return 0; if(n==1||m==1)//和为n,n=1或者m=1,不管另一个参数的值为什么,结果都只有一种 return 1; if(n<m
2021-04-23 11:57:40
221
原创 HanoiTower汉诺塔问题(递归C++)
问题:解决将n个盘子从A移动到B,借助辅助盘C,需要多少次?描述每一步过程 代码如下: #include<iostream> #include<cstdio> using namespace std; int num;//移动的总次数; void Hanoi(int n,char a,char b,char c)//从a移动到b,c为辅助 { if(n==1) { num++; printf("将%d盘从%c移动到%c\n",n,a,b
2021-04-23 11:13:14
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人