算法训练 最小乘积

 时间限制:1.0s 内存限制:512.0MB 问题描述  给两组数,各n个。  请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。要求程序输出这个最小值。  例如两组数分别为:13  -5和-241  那么对应乘积取和的最小值应为:  (-5)*4+3*(-2)+1*1=-25输入格式  第一个行一个数T表示数据组数。后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。  n<=8,T<=1000输出格式  一个数表示答案。样例输入2313-5-24151 234510101样例输出-256 1#include<stdio.h>2#include<algorithm>3#include<iostream>4usingnamespacestd;5intT,n,i,j,a[10],b[10],sum;6intmain()7{8scanf("%d",&T);9while(T--)10{11sum=0;12scanf("%d",&a...
代码星球 代码星球·2020-04-05

基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题

1)区间完全覆盖问题问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖样例:区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5]解题过程:1将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8]2设置一个变量表示已经覆盖到的区域。再剩下的线段中找出所有左端点小于等于当前已经覆盖到的区域的右端点的线段中,右端点最大的线段在加入,直到已经覆盖全部的区域3过程:假设第一步加入[1,4],那么下一步能够选择的有[2,6],[3,5],[3,6],[3,7],由于7最大,所以下一步选择[3,7],最后一步只能选择[6,8],这个时候刚好达到了8退出,所选区间为34贪心证明:需要最少的线段进行覆盖,那么选取的线段必然要尽量长,而已经覆盖到的区域之前的地方已经无所谓了,(可以理解成所有的可以覆盖的左端点都是已经覆盖到的地方),那么真正能够使得线段更成的是右端点,左端点没有太大的意义,所以选择右端点来...

题目1006:ZOJ问题

 时间限制:1秒内存限制:32兆特殊判题:否提交:13212解决:2214题目描述:对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。是否AC的规则如下:1.zoj能AC;2.若字符串形式为xzojx,则也能AC,其中x可以是N个'o'或者为空;3.若azbjc能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;输入:输入包含多组测试用例,每行有一个只包含'z','o','j'三种字符的字符串,字符串长度小于等于1000。输出:对于给定的字符串,如果能AC则请输出字符串“Accepted”,否则请输出“WrongAnswer”。样例输入:zojozojoozoojoooozoojoooozoojozojooooozojozojoooo样例输出:AcceptedAcceptedAcceptedAcceptedAcceptedAcceptedWrongAnswerWrongAnswer条件一:zoj;条件二:xzojx可得到:zojzoojzoooj.....xzojxxzoojxxxzoo...
代码星球 代码星球·2020-04-05

题目标题: 猜年龄

 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。通过浏览器,直接提交他那时的年龄数字。注意:不要提交解答过程,或其它的说明文字。#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){__int64a,i,j,f;chars1[10],s2[10];intb[10];for(i=10;;i++){a=0;__int64k=i*i*i;__int64t=i*i*i*i;itoa(k,s1,10);itoa(t,s2,10);if(strlen(s1)==4&&strlen(s2)==6){memset(b,0,sizeof(b));for(j=...
代码星球 代码星球·2020-04-05

题目标题: 第39级台阶

  题目标题: 第39级台阶 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!  站在台阶前,他突然又想着一个问题:  如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈 右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?  请你利用计算机的优势,帮助小明寻找答案。  要求提交的是一个整数。 状态c[i][0]表示走到第i个楼梯时最后一步是左脚的方法数,c[i][1]是右脚的方法数。。那么,由于每一步能上一到两级,c[i][0] = c[i-1][1]+c[i-2][1](因为最后一步为左脚,倒数第二步肯定为右脚。。)。。然后一直递推。。最后c[39][1]即上到第39级而且是右脚的方法数即为答案。。1#include<stdio.h>2intmain()3{4inti,c[40][2];//0左脚,1右脚5c[0][0]=c[1...
代码星球 代码星球·2020-04-05

题目标题: 排它平方数

题目标题:排它平方数小明正看着203879这个数字发呆。原来,203879*203879=41566646641这有什么神奇呢?仔细观察,203879是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。具有这样特点的6位数还有一个,请你找出它!再归纳一下筛选要求:1.6位正整数2.每个数位上的数字不同3.其平方数的每个数位不含原数字的任何组成数位答案是一个6位的正整数。请通过浏览器提交答案。注意:只提交另一6位数,题中已经给出的这个不要提交。注意:不要书写其它的内容(比如:说明性的文字)。 1#include<stdio.h>2#include<string.h>3intjudge(__int64n)4{5__int64n1=n*n,t;6intb[10];7memset(b,0,sizeof(b));89while(n)10{11t=n%10;12n/=10;13if(b[t])14return0;15b[t]=1;1617}18while(n1)19{20t=n1%10;21n1/=10;22if(b[...
代码星球 代码星球·2020-04-05

南洋理工 OJ 115 城市平乱 dijstra算法

时间限制:1000 ms | 内存限制:65535 KB难度:4 描述南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。注意,两个城市之间可能不只一条路。 输入第一行输入一个整数T,表示测试数据的组数。(T<20)每组测试数据的第一行是四个整数N,M,P,Q(1<=N<=100,N<=M<=1000,M-1<=P<=100000)其中N表示部队数,M表示城市数,P表示城市之间的路的条数,Q表示发生暴乱的城市编号。随后的一行是N个整数,表示部队所在城市的编号。再之后的P行,每行有三个正整数,a,b,t(1<=a,b<=M,1<=t<=100),表示a...

Bellman-Ford算法

1#include<stdio.h>2#definemax0xffffff3intg[20001][20001];//图的邻接矩阵4intdist[20001];5intn;//顶点个数6intm;//边个数7structEdge8{9intu,v,w;//边:起点、终点、权值10};11Edgee[200001];12boolbellman_ford(intn)//bellman-ford算法13{14inti,k,t,j;15for(i=0;i<n;i++)16dist[i]=g[0][i];//初始化17for(i=1;i<=n-1;i++)18{1920/*假设第k条边的起点是u,终点是v,以下循环考虑第k条边是否会使得源点v0到v的21最短距离缩短,即判断dist[edges[k].u]+edges[k].w<dist[edges[k].v]是否成立*/22for(j=0;j<n;j++)23{24printf("%d",dist[j]);25}26printf("");27for(k=1;k<=m;k++)28{29t=dist[e...
代码星球 代码星球·2020-04-05

贪心算法 找零钱

1#include<stdio.h>2#defineN603intexchage(floatn,float*a,intc,float*r);4voidmain()5{6floatrmb[]={100,50,20,10,5,2,1,0.5,0.2,0.1};7intn=sizeof(rmb)/sizeof(rmb[0]),k,i;8floatchange,r[N];;9printf("请输入要找的零钱数:");10scanf("%f",&change);11for(i=0;i<n;i++)12if(change>=rmb[i])13break;14k=exchage(change,&rmb[i],n-i,r);15if(k<=0)16printf("找不开!");17else18{19printf("找零钱的方案:%.2f=",change);20if(r[0]>=1.0)21printf("%.0f",r[0]);22else23printf("%.2f",r[0]);24for(i=1;i<k;i++)25{26if(r[i]...
代码星球 代码星球·2020-04-05

HDOJ 1863 prim算法 HDOJ 1879

1#include<cstdio>2#include<cstring>3#defineinf0xffffff4intg[101][101];5intans;6voidprim(intn)7{8intlowcost[101],used[101],i,j,k,min,closet[101];9memset(used,0,sizeof(used));10for(i=1;i<=n;i++)11lowcost[i]=g[i][1],closet[i]=1;12used[1]=1;13for(i=1;i<n;i++)14{15j=1;16min=inf;17for(k=2;k<=n;k++)18{19if(lowcost[k]<min&&!used[k])20min=lowcost[k],21j=k;22}23ans+=g[j][closet[j]];24used[j]=1;25for(k=2;k<=n;k++)26{27if(g[k][j]<lowcost[k]&&!used[k])28lowcost[k...

HDOJ 2066 floyed优化算法

TimeLimit:1000/1000MS(Java/Others)   MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):15657   AcceptedSubmission(s):5350ProblemDescription虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。 Input输入数据有多组...

数据结构与算法实验题7.1 M 商人的求救

问题描述:A国正面临着一场残酷的战争,城市被支持不同领导的两股势力占据,作为一个商人,M先生并不太关心政治,但是他知道局势很严重,他希望你能救他出去。M先生说:“为了安全起见,我们的路线最多只能包含一条连接两股不同势力城市的道路”。M先生想知道最快多久能到达目的地。数据输入:第一行N(2<=N<=600),代表城市个数。第二行M(0<=M<=10000),代表道路条数。接下来M行每行三个数A,B,T。代表一条从城市A到城市B的路(双向边)需要耗时T(1<=T<=1500)。接下来一行N个数,这些数只会是1或者2,第i个数字代表第i个城市属于第几股势力。为了简化问题,我们假设开始时M先生在城市1,目的地是城市2,城市1属于第1股势力,城市2属于第2股势力。道路是双向的。数据保证没有重边。结果输出:输出最少需要的时间。如果无法到达则输出-1。输入示例:输出示例:2112100121003312100134023501219055312005315025160431704217012221540并查集+dijstra算法1#incl...

杭电hdoj题目分类

HDOJ题目分类 //分类不是绝对的 //"*"表示好题,需要多次回味 //"?"表示结论是正确的,但还停留在模块阶段,需要理解,证明。 //简单题看到就可以敲的  1000:   入门用;1001:   用高斯求和公式要防溢出1004:1012:1013:   对9取余好了1017:1021:1027:   用STL中的next_permutation()1029:1032:1037:1039:1040:1056:1064:1065:1076:   闰年1084:1085:1089,1090,1091,1092,1093,1094,1095,1096:全是A+B1108:1157:1196:1197:   进制1202:1215:1219:1228:1229:1234:1235:1236:1256:1259:1262:1279:1280:1283:...
代码星球 代码星球·2020-04-05

数据结构与算法实验题7.2 连环计

问题描述:赤壁之战前夕,庞统向周瑜献连环计,瑜设计使蒋干邀庞统到曹营。操与统同观营寨,又共论兵法。统对答如流使操敬服。统乘机提出:大江中风浪不息使北兵易生疾病。可将大小船配搭,首尾用铁环连锁,铺阔板以便人马行走。操闻之大喜,派人连夜打造连环大钉,锁住船只。每打造一单位长度的铁索要花费一单位的钱,曹操希望用最少的花费将n艘战船连接起来(任意两艘战船直接或间接被铁索连接),每艘战船可以看成一个点,坐标为(xi,yi),曹营中有一位神秘人物,他所在的战船必须和曹操所在战船直接连接,求最小花费。数据输入:第一行战船数n(2<=n<=100)。第二行神秘人物所在的战船序号a,曹操所在战船序号b,(1<=a,b<=n,a!=b),战船序号从1到n。接下来n行,每行两个实数(建议定义成double类型):xi,yi(-1000<=xi,yi<=1000),表示序号为i的战船的坐标。结果输出:连接n艘战船的最小花费,输出答案的时候四舍五入保留两位小数。输入示例:输出示例:42300100-11-13.14 根据prim算法思想,把已经建成的道路初始化为0就...

Floyd算法 及其运用

1#include<stdio.h>2intdis[601][601];3intpath[601][601];4voidfloyd(intn)5{6for(intk=1;k<=n;k++)7{8for(inti=1;i<=n;i++)9{10for(intj=1;j<=n;j++)11{12printf("d[%d][%d]=%d",i,j,dis[i][j]);13printf("d[%d][%d]=%dd[%d][%d]=%d",i,k,dis[i][k],k,j,dis[k][j]);1415if(dis[i][k]+dis[k][j]<dis[i][j])16{17dis[i][j]=dis[i][k]+dis[k][j];18printf("%d",dis[1][2]);19path[i][j]=path[k][j];20}21}22}23}24}252627voidfind(inta,intb)28{29intp[100],k=0;30p[k++]=b;31while(path[a][b]!=a)32{33p[k++]=path[a][b...
代码星球 代码星球·2020-04-05
首页上一页...118119120121122...下一页尾页