算法
今天写算法了吗
这个作者很懒,什么都没留下…
展开
-
【回溯法】最佳调度问题
#include<bits/stdc++.h>using namespace std;int n,k;int t[999];//完成工作i所需的时间 int best=999;//best为最终结果 即完成任务的最早时间 int len[999]={0};// 为机器j工作的时间 int comp(){ int tmp=0; for(int j=0;j<k;j++) if(len[j]>tmp) tmp=len[j]; return tmp;}void原创 2021-05-29 17:02:10 · 325 阅读 · 0 评论 -
【回溯法】工作分配问题
#include<bits/stdc++.h>using namespace std;int n,c[999][999];//n个工作,c[i][j]为将工作i分配给第j个人所需的费用 int x[999];//第j个人是否被安排工作int sum=0;//总费用int minc=999;void backtrack(int i){ if(i>n)//到底 { if(minc>sum) minc=sum; return; } for(int原创 2021-05-28 18:24:04 · 376 阅读 · 0 评论 -
【回溯法】最小重量机器设计问题
#include<bits/stdc++.h>using namespace std;int n,m,d;//n个部件,m个供应商,总价格不超过dint c[999][999];//c[i][j]为从供应商j购买部件i所花费的价格;int w[999][999];//w[i][j]为......重量int cw=0,cp=0;//当前部件的重量 价格int bestw=999,bestp=999;//最优方案的重量,价格int x[999];//当前部件i从供应商j购买int b原创 2021-05-28 16:17:20 · 552 阅读 · 0 评论 -
【回溯法】子集和问题
#include<bits/stdc++.h>using namespace std;int t=0,r=0;int w[999],x[999]={0};int flag;int n,c;void backtrack(int i){ if(t==c) { for(int j=0;j<n;j++){ if(x[j]==1){ cout<<w[j]<<" "; } } flag=true; return; }原创 2021-05-27 11:25:14 · 502 阅读 · 0 评论 -
最优分解问题 c++ 详解
设n是一个正整数,要求将n分解为若干互不相同的自然数之和,且这些自然数的乘积最大。输入:正整数n输出:计算的最大乘积。如输入10,则输出30.提示:若a+b=const ,则a-b的绝对值越小,ab值越大。贪心策略:将n分成从2开始的连续自然数之和,如果最后剩下一个数,则将此数在后项优先的方式下均匀地分给前面各项。#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; if(n&l原创 2021-05-12 23:17:54 · 903 阅读 · 0 评论 -
虚拟汽车加油问题 c++ 贪心讲解
问题描述:一辆虚拟汽车加满油后可行驶 n km。旅途中有若干加油站。设计一个有效算法,指出应该在那些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。算法设计:对于给定的n和k个加油站位置,计算最少次数。数据输入:第一行有两个整数n和k,表示汽车加满油后可行驶n km,且旅途中有k个加油站。接下来的1行有k+1个整数,表示第k个加油站与第k-1个加油站的之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。输入示例:7 71 2 3 4 5 1 6 6原创 2021-05-12 22:09:32 · 644 阅读 · 0 评论 -
最优服务次序问题 贪心算法
设有n 个顾客同时等待一项服务。顾客i需要的服务时间为t i,1≤i≤n。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间的总和除以n。对于给定的n 个顾客需要的服务时间,计算最优服务次序。输入:输入数据的第一行是正整数n(n≤1000),表示有n 个顾客。接下来的1行中,有n 个正整数,表示n 个顾客需要的服务时间。输出:输出一个实数,保留2位小数,表示计算出的最小平均等待时间。示例输入:1056 12 1 99 1000 234 33 55 9原创 2021-05-12 13:05:38 · 396 阅读 · 1 评论 -
最优合并问题 贪心算法 c++
题目描述:给定k个排好序的序列,用2路合并算法将这k个序列合并成一个序列。假设所采用的2路合并算法合并2个长度分别为m和n的序列需要m+n-1次比较。试设计一个算法确认合并这个序列的最优合并顺序,使所需的总比较次数最少。为了进行比较,还需要确认合并这个序列的最差合并顺序,使所需的总比较次数最多。对于给定的k个待合并序列,计算最多比较次数和最少比较次数合并方案。输入描述:第一行有1个正整数k,表示有k个待合并序列。接下来的1行中,有k个正整数,表示k个待合并序列的长度。输出描述:输出最多比较次数和最原创 2021-05-12 11:35:45 · 949 阅读 · 0 评论 -
会场安排问题 (贪心算法)
题目描述假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排#include<bits/stdc++.h>using namespace std;struct act{ int begin; int end; int belong;};bool compare(struct act a,struct act b){ return a.begin<b.begin; if(a.begin==b.begin) return a.原创 2021-05-11 22:09:55 · 1115 阅读 · 2 评论 -
【动态规划】最大k乘积问题(c++ 含讲解)
设I是一个 n位十进制整数。如果将I划分为 k段,则可得到k个整数。这k个整数的 乘积称为I的一个 k乘积。试设计一个算法,对于给定的 I和 k,求出 I的最大 k乘积。 对于给定的I和k,计算 I的最大 k乘积.#include<bits/stdc++.h>using namespace std; string str;int conv(int i,int j){ string str1=str.substr(i,j); return atoi(str1.c_str());}原创 2021-04-29 11:28:58 · 2217 阅读 · 0 评论 -
最小m段和问题 动态规划 c++含讲解
最小m段和问题给定n个整数组成的序列,现在要求将序列分割为m段,每段子序列中的数在原序列中连续排列。如何分割才能使这m段子序列的和的最大值达到最小?#include<bits/stdc++.h>using namespace std;void solve(int n,int m,int *t){ int i,j,k,mint,maxt; int f[n][m]; //当j=1 即分为1段时 for(i=1;i<=n;i++) f[i][1]=f[i-1][1]+t[i原创 2021-04-28 11:31:10 · 2188 阅读 · 0 评论 -
石子合并问题
环行石子合并问题在一个圆形操场的四周摆放着n堆石子,现将石子有次序的合并在一起,规定每次只能将相邻的两堆石子合并成一堆,并将新的一堆石子数记为该次合并的得分,计算出将n堆石子合并成一堆的最小得分和最大得分#include<bits/stdc++.h>using namespace std;const int N=410,INF=0x3f3f3f3f;int n;int a[N];int s[N];int f[N][N];int g[N][N];int main(){ me原创 2021-04-28 10:46:05 · 471 阅读 · 0 评论 -
算法设计与分析实验题
统计数字问题#include<iostream>#include<cstdio>#include<cmath>using namespace std;int c[10];void solve(int n){ int len=log10(n)+1;//数的位数 //00-2999 int p=n/((int)round(pow(10.0,len-1)));//区间数 0-33330 有3个区间 for(int原创 2021-04-15 11:25:14 · 281 阅读 · 1 评论 -
独立任务最优调度问题 动态规划 含讲解
任务调度问题题目:用2 台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时需要时间i a ,若由机器B 来处理,则需要时间i b 。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai >=bi,而对于某些j,j≠i,有aj < bj 。既不能将一个作业分开由2 台机器处理,也没有一台机器能同时处理2 个作业。设计一个动态规划算法,使得这2 台机器处理完这n个作业的时间最短(从任何一台机器开工到最后一台机器停工的总时间)。研究一个实例: (a1,a2,a3,a4,a5,a原创 2021-04-27 11:48:44 · 498 阅读 · 0 评论