三九宝宝网宝宝教育学龄段教育

算法设计以及数据结构

03月12日 编辑 39baobao.com

[数据结构和算法分析java怎么样]CallSuper Annotations Enumerated Annotations Thread Annotations Thread Annotations 有四位成员 - UiThread、MainThread、WorkerThread、BinderThread,它们来自不同的 j...+阅读

参考代码: var n,k,i,j,tou,num:integer; a:array[1..20]of integer; begin for i:=1 to 20 do a[i]:=0; read(n,k); for i:=1 to n do inc(a[i]); tou:=1; j:=0; repeat if tou>n then tou:=1 else begin if a[tou]>0 then begin inc(num); if num=k then begin write(tou,' '); a[tou]:=0; inc(j); num:=0; end; inc(tou); end else inc(tou); end; until j=n; end.

算法策略思路

你题目中应该是"取出一个水果"耗时而不是"取出一种"耗时吧?

那么贪心策略应该可行.

首先,每个水果都要被取出来,而且最少也必须花费1s的时间.那么很显然固定需要的一个时间就是水果数*1s,我们不妨将这个时间称为Tb,后面的考虑中可以先除去这一部分的耗时.

如此一来,每次取出一种新的水果就要花费1s,而取出已经见过的水果就不需要花费时间.

接下来考虑每一个箱子,如果该箱子作为第一个取的箱子,那么总时间就要加上这个箱子中的水果总数,然后其他箱子中相同类型的水果就"被剔除"了(因为不再消耗时间).

也就是说,如果取某一个箱子作为"第一个",那么最终答案需要加上这个箱子的水果总数,但是该箱子具有的水果类型都被剔除,于是最终答案的计算又会少去了这些水果类型对应的水果总数.如此一来这就是一个衡量某一个箱子的价值的方式.自然选出"性价比"最高的那个箱子是好的.

而做完这第一步决策之后,自然可以进一步简化问题,使得这些已经被选过的水果统统被排除掉.然后从新进行一次"选择第一个箱子".

直观一点来举个例子.假设水果有A,B,C三种,箱子有1,2,3,4四个.具体为:

1 2 3 4

A 2 0 0 1

B 0 2 0 1

C 0 0 2 4

一开始,第一个箱子的性价比是[A]/[1] = 3/2,第二个是 [B]/[2] = 3/2,第三个是 [C]/[3] = 6/2 = 3, 第4个是 ([A]+[B]+[C])/[4] = 12/6 = 2, 显然选第三个.

然后就可以简化成:

1 2 4

A 2 0 1

B 0 2 1

其中C已经被删除掉了.然后计算出第一个箱子[A]/[1] = 3/2, 第二个 [B]/[2] = 3/2, 第三个 ([A]+[B])/[4] = 6/2 = 3

选第三个,然后所有的水果类型都被删除了,此时已经得到了最佳答案:

2 + 2 + Tb = 16

ps:方括号代表某行或者某列的和.

穷举法算法设计策略的一般框架是什么

是广搜吗?我以前做过的#include#include int exist[363000]; int fac[10]={1}; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int rank(const int n[]) { int sum,i,ans=0,j,used[10]={0}; for(i=0;i { sum=0; for(j=1;j if(used[j]) sum++; ans+=(n[i]-1-sum)*fac[9-i-1]; used[n[i]]=1; } return ans; } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } void BFS() { int front=-1,rear=0,i,size,step=0; int queue[363000]={123456789},t,j; int temp[3][3],k,matrix[3][3],x,y,tx,ty; int n[10],ans,sum,u; memset(exist,-1,sizeof(exist)); exist[0]=0; while(front { size=rear-front; step++; while(size--) { front++; t=queue[front]; i=0; j=0; while(t) { matrix[i][j]=t%10; t/=10; j++; if(j%3==0&j>0) { i++; j=0; } } swap(&matrix[0][0],&matrix[2][2]); swap(&matrix[0][1],&matrix[2][1]); swap(&matrix[0][2],&matrix[2][0]); swap(&matrix[1][0],&matrix[1][2]); for(i=0;i for(j=0;j if(matrix[i][j]==9) { x=i; y=j; break; } for(i=0;i { tx=x+dir[i][0]; ty=y+dir[i][1]; if(!(tx>=0&tx=0&ty continue; for(j=0;j { for(k=0;k temp[j][k]=matrix[j][k]; } k=temp[x][y]; temp[x][y]=temp[tx][ty]; temp[tx][ty]=k; for(k=u=0;u { for(j=0;j n[k]=temp[u][j]; } ans=rank(n); if(exist[ans]>-1) continue; exist[ans]=step; sum=0; for(u=0;u sum=sum*10+n[u]; rear++; queue[rear]=sum; } } } } main() { int i,n,temp[10],ans,j; char s[100]; for(i=1;i fac[i]=fac[i-1]*i; BFS(); while(gets(s)) { for(j=0,i=0;s[i]!='\0';i++) { if(s[i]!=' ') { if(s[i]!='x') temp[j++]=s[i]-'0'; else temp[j++]=9; } } ans=rank(temp); if(exist[ans]==-1) printf("unsolveable\n"); else printf("%d\n",exist[ans]); } }

以下为关联文档:

数据结构课程设计#include "stdio.h" struct node {int a; struct node *p; }; typedef struct node AA; /*输出数据*/ AA printft(AA *no) { AA *p1; p1=no->p; while(p1!='\0') {printf("%d ",p...

数据结构的课程设计Huffman 编码 一、实验目的 熟悉Huffman编码方法。 了解并弄懂Huffman编码实现信息的无损压缩原理。 二、实验要求 熟悉C语言编程。 三、实验内容 1.根据给定的n个权值(w1, w...

数据结构课程设计任务1 需要查找到用户的名字。查找表当然为顺序表adjlist[max]。 typedef struct vnode{ VertexType name; node *next; 积分信息 DATA; }vnode,adjlist[MAX]; 2 此顺序表结构体...

数据结构课程设计作业polynomal.h-- #include#include#include"math.h" struct Term { float coef; int exp; Term *link; Term(float c,int e,Term *next=NULL) { coef=c; exp=e; link=next; } Te...

谁养鱼问题的数据结构算法课程设计报告.需求分析1.运行环境硬件:计算机486/64M以上操作系统:WIN9x以上/WIN2000/WINXP/WINME相关软件:vistualC++2.程序所实现的功能: (1)建立并显示图的邻接表。 (2)深度优先遍历,显示遍历...

数据结构课程设计报告1、一元稀疏多项式相加 详细设计 4.1 程序头的设计: #include#includetypedef struct pnode {int coef;/*系数 */ int exp;/*指数 */ struct pnode *next;/*下一个指针*/ }pnode...

通俗说数据结构算法有什么关系啊数据结构: 当然就有存储结构和逻辑结构两种,分别研究数据的实际物理存储和理论上的结构形式。 比如在计算机中,数组在物理的存储介质上(存储器)是连续存储的(比如你家柜子上几层的...

数据结构难还是算法设计与分析算法导论》 《数据结构算法分析—C语言描述》 《计算机程序设计艺术》 《计算机算法设计与分析》 教材是供教学用的资料,如课本、讲义等。教材的定义有广义和狭义之分。...

算法设计与分析Hello, it is a simple . Following procedure can be fullly implements your requirements. I brief the core code below. int sort(A[] a,V v){ //define the input (A...

推荐阅读
图文推荐