结构和sort进一步的了解

时间:2021-02-18 09:44:43

  

 古窑是某瓷都最著名的陶瓷历史文化景点,景区内的古工艺、古作坊、古窑房、古建筑,

堪称瓷文化风景之“四绝”,在文博旅游资源中,起着举足轻重的作用。

对古瓷器的开发利用,关键是要做“活”,充分挖掘其丰富的文化内涵,让历史与现实

对话。但要真正演绎或体现其陶瓷文化内涵,必须全方位恢复以圆器和琢器为典型代表的手

工艺作坊全部的传统工艺生产流程,增加其内涵价值。

 

某瓷器厂准备赶制一批仿古瓷器,参加某国世博会的展览。按照六大要素进行整合设

计和规划,要生产出这批高品质的瓷器,需要多项工艺制作过程,每一项工艺都需要一定的

时间来完成。当然,有些工艺必须在另一些工艺完成的情况下才能进行。我们把这些工作称

为完成本项工艺的前期准备工作。至少有一项工艺制作不需有前期准备工作,这项工作可以

最早着手完成的工作,标记为工艺研发科的Dr.Kong接到了一个要完成NN个工艺制作的清单,并且这份清单是有一定顺序的,工艺K (k>1)的准备工作只可能在工艺11..k-1中。

Dr.Kong写一个程序,计算出所有工艺都被制作完成的最短时间。当然互相没

有关系的工艺可以同时工作,并且,你可以假定瓷器厂有足够多的工人来同时完成任意多项工艺的制作任务。

1行:  

N       表示必须要完成的工艺的数目 (3<=N

NN

N<=500)

2 ~ N+1行:每行有一些用1个空格隔开的整数,分别表示:

                 * 工艺序号i(1<=i<=N,)

                 * 完成本项工作所需要的时间Ti

Ti1<=Ti<=100);

* 一些必须完成的准备工作,总数不超过100个,由0结束。有些工艺的制作是不需要准备的工作的只描述一个单独的0。一个整数,表示完成所有工艺制作需要的最短时间。

标准输入 标准输出

7

1 5

55

5 0

2 2

22

2 1 0

3 3

33

3 2 0

4 6

66

6 1 0

5 1

11

1 2 4 0

6 8

88

8 2 4 0

7 4 3 5 6 0

 

23

代码:

#include<iostream>
using namespace std;
#include<string.h>
#include<algorithm>
struct product
{
int number,time,pre[10];   //结构里面还可以在放一个数组 
} pdt[505];


int cmp(product a,product b)
{
return a.number<b.number;
}
int main()
 {
int i,j,n,max;
cin>>n; 
memset(pdt,0,sizeof(product));    //memset可以对结构里面所有的数据都清零 
/* for(i=0;i<n;i++)
{
cout<<pdt[i].number<<endl;
cout<<pdt[i].time<<endl;
  for(j=0;j<10;j++)
  cout<<pdt[i].pre[j]<<"  ";    //结构数组里面可以在加一个数组!这个看似奇怪的东西是正确的!!!   
  cout<<endl; 
}*/

/* for(i=0;i<n;i++)
{
cin>>pdt[i].number>>pdt[i].time;
for(j=0;;j++)
{
cin>>pdt[i].pre[j];
if(pdt[i].pre[j]==0)break;
}

}
sort(pdt,pdt+n,cmp);    //之前就是对sort排序理解的不是太透彻,导致了后面的麻烦而又不易发现的错误

/* for(i=0;i<n;i++)   //sort可以对结构排序,也可以对结构里面还存在结构的排序,总之,可以对结构排序!!! 
{
cout<<pdt[i].number<<" "<<pdt[i].time<<" ";
for(j=0;;j++)
{
cout<<pdt[i].pre[j]<<" ";
if(pdt[i].pre[j]==0)break;
}
cout<<endl;

}*/

/* for(i=0;i<n;i++)
{
max=0;
for(j=0;;j++)
{
if(pdt[i].pre[j]==0)break;
if(pdt[pdt[i].pre[j]-1].time>max)
max=pdt[pdt[i].pre[j]-1].time;
}
pdt[i].time=pdt[i].time+max;
}
 
// cout<<pdt[--i].time<<endl;
for(i=0,max=0;i<n;i++)
{
if(pdt[i].time>max)
max=pdt[i].time;

}
cout<<max<<endl;

   return 0;




}
/*#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int i;
int a[20];
for(i=1;i<=9;i++)
scanf("%d",&a[i]);
sort(a+3,a+8);      //对第三个数到第七个数排序,而不用非要从第零个到n-1个了 8-3,即是排序的个数
for(i=1;i<9;i++)
printf("%d****",a[i]);
return 0;
}*/


以后sort排序时一律写成这样的格式:

for(i=0;i<n;i++)sort(s,s+n,cmp);

for(i=a;i<b;i++)sort(s+a,s+b;cmp);

for里面不要在写<=了,统一的用<