![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
谁点的钵钵鸡
这个作者很懒,什么都没留下…
展开
-
计算矩阵连乘积
计算矩阵连乘积在科学计算中经常要计算矩阵的乘积。矩阵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,最少的乘法次数。递归公式:请编写程序实现矩阵连乘问题的动态规划算法,自己设计不少于3组的测试数据,要求显示出最原创 2021-01-06 00:19:57 · 604 阅读 · 0 评论 -
PTA-最大字段和
最大字段和#include <iostream>using namespace std;#define MAX 10001int n;int a[MAX];int b[MAX];int max = 0;int max_sum(){ for (int i = 0; i < n; i++) { if (i == 0) { b[i] = a[i]; max = b[i]; } else { if (b[i - 1] <= 0)原创 2021-01-03 21:32:58 · 145 阅读 · 0 评论 -
PTA-装箱问题
装箱问题#include <iostream>using namespace std;int main() { int N, a[1001], b[1001] = { 0 }, count = 0; cin >> N; for (int i = 0; i < N; i++){ cin >> a[i]; } for (int i = 0; i < N; i++) { for (int j = 1; j <= N; j++)原创 2021-01-01 23:56:44 · 226 阅读 · 0 评论 -
PTA-看电影
#include<iostream>#include<stdio.h>#include <vector>#include <algorithm>using namespace std;int sum;struct movie { int start; int end;};int cmp(movie a, movie b) { return a.end < b.end;}int main() { int n; while.原创 2020-12-31 00:53:44 · 367 阅读 · 0 评论 -
0-1背包问题(动态规划)
#include<iostream>using namespace std;#define N 50int i, j,n, c,v[N], w[N], dp[N][10 * N], x[N] = { 0 };void max() { int cv; j = c; for (j = 0; j <= c; j++) { if (j < w[n]) dp[n][j] = 0; else { dp[n][j] = v[n]; } } for (.原创 2020-12-26 10:08:53 · 84 阅读 · 0 评论 -
最优分解问题
最优分解问题问题描述:设n是一个正整数,要求将n分解为若干互不相同的自然数之和,且这些自然数的乘积最大。输入:正整数n输出:计算的最大乘积。如输入10,则输出30若a+b=const ,则a-b的绝对值越小,ab值越大。贪心策略:将n分成从2开始的连续自然数之和,如果最后剩下一个数,则将此数在后项优先的方式下均匀地分给前面各项。#include<iostream>using namespace std;int main() { int num; cin >> n原创 2020-12-24 17:24:55 · 322 阅读 · 2 评论 -
PTA-N鸡问题
#include <iostream>#include<string>using namespace std;int main() { int n,c=0,sum=0; cin >> n; for (int i = 0; i <= n/5; i++) { for (int j = 0; j <= n/3; j++) { for (int k = 0; k <= n; k++) { if ((5 * i + 3 *..原创 2020-12-23 23:38:43 · 173 阅读 · 0 评论 -
PTA-搬砖
#include <iostream>#include<string>using namespace std;int main() { int n,sign=0; cin >> n; for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) { for (int k = 0; k <= n; k++) { if ((3 * i + 2 * j + 0...原创 2020-12-23 23:34:26 · 693 阅读 · 0 评论 -
PTA-最大子段和
#include <iostream>using namespace std;int max_sum(int n, int a[], int b[], int max){ for (int i = 0; i < n; i++) { if (i == 0) { b[i] = a[i]; max = b[i]; } else { if (b[i - 1] <= 0) b[i] = a[i]; else b[i] = .原创 2020-12-22 22:49:45 · 278 阅读 · 0 评论 -
PTA-活动选择问题
#include<iostream>#include<stdio.h>#include <vector>#include <algorithm>using namespace std;struct activity { int start;//活动开始时间 int end;//活动结束时间};int cmp(activity a, activity b) { return a.end < b.end;}int main().原创 2020-12-22 12:57:57 · 602 阅读 · 0 评论 -
PTA-递归实现逆序输出整数
#include<iostream>using namespace std;void print(int n) { if (n == 0) { return; } cout << n % 10; n = n / 10; print(n);}int main() { int n; cin >> n; print(n); return 0;}原创 2020-12-22 11:56:52 · 985 阅读 · 0 评论 -
PTA-最佳调度问题
#include<iostream>using namespace std;int n, k, a[1000];int min_time;int m[100];void backtrack(int t) { if (t == n) { int time = 0; for (int i = 0; i < k; i++) { if (time <= m[i]) { time = m[i]; } } if (min_time >= t.原创 2020-12-22 10:31:37 · 196 阅读 · 0 评论 -
0-1背包问题
0-1背包问题#include<iostream>using namespace std;int c, n, *w, *v, *x;int sw = 0, cv = 0, bestv = 0;void backtrack(int k) { int i; if (k > n) { if (cv > bestv) { bestv = cv; } return; } else { for (i = 0; i <= n; i++) {原创 2020-12-21 23:58:34 · 71 阅读 · 0 评论 -
PTA-工作分配问题
用check函数检查工人是不是在做同一份工作,是返回false,否则返回true。函数backtrack实现对第k层子树进行搜索。当参数k的值大于n时,表示已经搜索至叶子结点,此时得到问题的一个解,判断是否是最低费用,是就赋值给best。当k的值小于等于n时,此时访问的是状态空间树的内部结点,该结点有n个(未剪枝时)子结点,逐一进行试探,由函数check进行检测,根据检测是否是合法放置,进行深度优先的递归搜索,或者进行剪枝操作,剪去有冲突的子树。#include<iostream>usin.原创 2020-12-17 16:13:05 · 269 阅读 · 0 评论 -
PTA-八皇后问题
在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。例如:现在我们把棋盘扩展到 n×n 的棋盘上摆放 n 个皇后,请问该怎么摆?请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。输入格式正整数 n(n>0)输出格式若问题有解,则输出全部原创 2020-12-15 19:59:40 · 2694 阅读 · 1 评论 -
递推算法
递推算法:递推是按照一定的规律计算序列中的每一项,通常是通过计算前面的一些项来得出序列中指定项的值,主要思想就是把复杂的,庞大的计算过程转化为简单的,重复的计算过程。递推算法的首要问题就是得到相邻的数据项之间的关系,即递推关系。递推实施步骤:1.确定递推变量。2.确定边界条件。3.确定递推关系。4.对递推过程进行控制,即确定递推结束条件。举个例子无穷数列1,1,2,3,5,8,21,34,55…称为Fibonacci数列。F(1)=F(2)=1,F(n)=F(n-1)+F(n-2)(n>原创 2020-11-20 21:45:55 · 448 阅读 · 0 评论