算法设计与分析
文章平均质量分 88
果冻pudding
潜心修学
展开
-
工厂机器安排(Java)
Today the company has m tasks to complete. The ith task need xi minutes to complete. Meanwhile, this task has a difficulty level yi. The machine whose level below this task’s level yi cannot complete this task. If the company completes this task, they will原创 2020-08-03 11:02:13 · 483 阅读 · 0 评论 -
会场安排问题(贪心算法Java)
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的 贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个 顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小 会场数。)输入格式:第一行有 1 个正整数k,表示有 k个待安排的活动。 接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间 以 0 点开始的分钟计。输出格式:输出最少会场数。输入样例:51 2312 2825 3原创 2020-08-02 14:15:36 · 3033 阅读 · 1 评论 -
月饼(Java)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。输入格式原创 2020-08-01 11:36:02 · 2707 阅读 · 0 评论 -
字符串的全排列(Java)
给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。输入格式:一行,一个字符串,长度不大于8。输出格式:输出所有全排列,每行一种排列形式,字典序从小到大。输入样例:在这里给出一组输入。例如:abc输出样例:在这里给出相应的输出。例如:abcacbbacbcacabcba解析:可以先将输入的字符串按照全排列先排一遍,将结果存入一个容器中,然后对容器中的所有字符串进行排序代码如下import java.io.BufferedInputStream;im原创 2020-07-29 16:47:35 · 832 阅读 · 0 评论 -
士兵排队(Java)
在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点用整数坐标(x,y)表示。士兵们可以沿网格边往上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x和y的值才能使士兵们以最少的总移动步数排成一行。编程计算使所有士兵排成一行需要的最少移动步数。输入格式:第1行是士兵数n,1≤n≤10000。接下来n行是士兵的初始位置,每行有2个整数x和y,-10000≤x,y≤10原创 2020-07-27 11:43:40 · 682 阅读 · 0 评论 -
子序列的平均值(Java)
给定一个长度为n的非负序列A,请你找出一个长度不小于L的子段(子段是序列A中一些连续的元素构成的集合),使得子段中数值的平均值最大。最终输出这个最大的平均值。输入格式:第一行两个整数n,L(1<=L<=n<=100,000)以下n行,每行一个非负整数,表示序列A中每个元素的值。输出格式:一个整数,欲求的最大平均值乘以1000后的结果(注意不要四舍五入,直接输出)。输入样例:10 664210385941输出样例:6500解析:可以用二分答案的方法来原创 2020-07-26 22:58:21 · 3693 阅读 · 0 评论 -
分形的递归输出(Java)
题目描述用递归求解,如何用递归把图形画出来,需要多思考思考,可以多看几遍代码,然后自己动手画一画。代码如下import java.io.BufferedInputStream;import java.util.Scanner;public class Main { public static char[][] ch= new char[2188][2188]; //快速幂 public static int Muti(int base,int up) { int result=1;原创 2020-07-25 17:41:08 · 533 阅读 · 0 评论 -
用矩阵快速幂求解斐波那契数列的第n项(Java)
问题描述:已知斐波那契数列 Fn=Fn−1+n−2(n>=3),F1=1,F2=1求解该数列的第n项,结果对998244353取模。提示:矩阵快速幂,unsigned long long的最大值:1844674407370955161(1.8e18)输入格式:输入一个正整数n (1<=n<=1e18)。输出格式:输出一个数,数列的第n项输入样例1:1输出样例1:1输入样例2:3输出样例2:2斐波那契数列可以通过矩阵快速幂来求解所以问题就转化为了求矩阵[原创 2020-07-25 16:29:19 · 1155 阅读 · 1 评论 -
矩阵取数游戏(动态规划)
小明经常玩一个矩阵取数游戏:对于一个给定的n x n的矩阵,矩阵中的每个元素aij表示该格子的价值,均为非负整数。游戏规则如下:小明从左上角走到右下角,只能向下向右走,经过某个格子,就能获得格子相应价值的奖励,请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大奖励值。输入格式:输入包括n+1行:第1行为一个整数n。(2 <= n <= 500)第2~n+1行为nxn矩阵,其中每行有n个用单个空格隔开的非负整数。(0 <= aij <= 10000)输出格式:仅包含原创 2020-06-10 10:21:31 · 2653 阅读 · 2 评论 -
石子合并问题(动态规划)
有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为该次合并的得分,编一程序,给出堆数n及每堆石子数(<=200);(1)选择一种合并石子的方案,使得做n-1次合并,得分的总和最少(2)选择一种合并石子的方案,使得做n-1次合并,得分的总和最多输入格式:第一行为石子堆数n第二行为每堆石子数,每两个数之间用一空格分隔。输出格式:第一行为最小合并得分,第二行是最大的合并得分。输入样例:在这里给出一组输入。例原创 2020-06-10 09:44:03 · 6667 阅读 · 6 评论 -
分苹果/分弹珠问题(动态规划)
把M个弹珠放到N个盘子里面(我们允许有的盘子为空),你能求出有多少种分法吗?(请注意,例如有三个盘子,我们将5,1,1和1,1,5,视为同一种分法)输入格式:输入包含多组测试样例。每组输入的第一行是一个整数t。 接下来t行,每行输入两个整数M和N,代表有M个弹珠和N个盘子。(0=<M<=20; 0<N<=20)输出格式:对于每对输入的M和N,输出有多少种方法。输入样例:在这里给出一组输入。例如:17 3输出样例:在这里给出相应的输出。例如:8解析:首先要写出原创 2020-06-07 19:09:00 · 1679 阅读 · 0 评论 -
拦截导弹(动态规划)
具体描述如下:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数,导弹数不超过1000),计算这套系统最多能拦截多少导弹?输入格式:输入只有一行,为若干个正整数(用空格隔开),依次为导弹的高度。输出格式:一行,为最原创 2020-06-07 11:18:25 · 866 阅读 · 0 评论 -
数字三角形,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。(动态规划)
问题描述如下给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。输入格式:输入有n+1行:第 1 行是数字三角形的行数 n,1<=n<=100。接下来 n行是数字三角形各行中的数字。所有数字在0…99 之间。输出格式:输出最大路径的值。输入样例:在这里给出一组输入。例如:573 88 1 02 7 4 44 5 2 6 5输出样例:在这里给出相应的输原创 2020-06-06 22:44:31 · 2070 阅读 · 0 评论 -
单调递增最长子序列问题(动态规划)
具体描述如下设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。输入格式:输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开输出格式:最长单调递增子序列的长度输入样例:在这里给出一组输入。例如:51 3 5 2 9输出样例:在这里给出相应的输出。例如:4解析:这道题考虑用动态规划的方法来求解,可以考虑用dp[i]表示以第i个数字结尾的最长子序列长度,那个以第i+1个结尾的最长子序列应该怎么找呢?我们就需要从第1个数字到第i个原创 2020-06-06 22:10:39 · 1981 阅读 · 0 评论 -
最长公共子串(动态规划)
题目描述:在两个字符串中找到最长公共子串,输出其长度分析:公共子串是连续的,所以要和公共子序列进行区分。用动态规划进行求解,写出递推关系式其中,C[i][j]表示的是,以a[i]和以b[j]结尾的符合要求的最优解,很显然,如果两个不相等,那么就不存在以这两个结尾的公共子串,所以值为0,如果相等,那就看去掉他们两个之后的串中的最优解具体代码如下#include<iostream>using namespace std;#define MAX 1002int dp[MAX][MAX原创 2020-06-05 12:24:05 · 426 阅读 · 0 评论 -
最大子矩阵和问题(动态规划)
具体问题描述如下最大子矩阵和问题。给定m行n列的整数矩阵A,求矩阵A的一个子矩阵,使其元素之和最大。输入格式:第一行输入矩阵行数m和列数n(1≤m≤100,1≤n≤100),再依次输入m×n个整数。输出格式:输出第一行为最大子矩阵各元素之和,第二行为子矩阵在整个矩阵中行序号范围与列序号范围。输入样例1:5 660 3 -65 -92 32 -70-41 14 -38 54 2 2...原创 2020-03-31 17:29:58 · 7973 阅读 · 0 评论