1 #include
2 #include
3
4 structobj5 {6 intweight;7 intid;8 int flag;//标示该物体是否被选中。 0标示未被选中,1表示被选中。
9 };10
11 void merge_sort1(struct obj *A,int x,int y,struct obj *T);//采用归并排序对A数组排序。按struct obj的weight从小到大排序。
12 void merge_sort2(struct obj *A,int x,int y,struct obj *T);//采用归并排序对A数组排序。按struct obj的id从小到大排序。
13
14 int cmp1(struct obj a,struct obj b);//按struct obj的weight比较a和b的大小
15 int cmp2(struct obj a,struct obj b);//按struct obj的id比较a和b的大小
16 int cmpQsort1(const void *a,const void *b);//按struct obj的weight比较a和b的大小
17 int cmpQsort2(const void *a,const void *b);//按struct obj的id比较a和b的大小
18
19 intmain()20 {21 intn,c,i,w,num;22 struct obj *arr,*T;23 freopen("5.in","r",stdin);24 scanf("%d%d",&n,&c);25 arr=(struct obj *)malloc(sizeof(struct obj)*n);26 T=(struct obj *)malloc(sizeof(struct obj)*n);27 for(i=0;i
35 /*for(i=0;i
",arr[i].weight,arr[i].id);36 printf("
");37 merge_sort2(arr,0,n,T);//按id排序38 for(i=0;i
",arr[i].weight,arr[i].id);*/
39
40 w=0;//所选物体的总重量
41 num=0;//所选物体的个数
42 for(i=0;i
45 arr[i].flag=1;46 num++;//选中的个数加1
47 if(w>c)48 {49 w-=arr[i].weight;50 arr[i].flag=0;51 num--;52 break;53 }54 }55 qsort(arr,n,sizeof(structobj),cmpQsort2);56 //merge_sort2(arr,0,n,T);//按id排序
57 for(i=0;i
58 {59 if(arr[i].flag==1) printf("Y");60 else printf("N");61 }62 printf("%d %d",w,num);63
64 free(arr);65 free(T);66 return 0;67 }68 void merge_sort1(struct obj *A,int x,int y,struct obj *T)69 {//采用归并排序对A数组排序。按struct obj的weight从小到大排序。
70 if(y-x>1)71 {72 int m=x+(y-x)/2; //划分
73 int p=x,q=m,i=x;74 merge_sort1(A,x,m,T);75 merge_sort1(A,m,y,T);76 while(p=y||(p
79 if(q>=y||(p=y||(p
81 else T[i++]=A[q++];82 }83 for(i=x;i
88 if(y-x>1)89 {90 int m=x+(y-x)/2; //划分
91 int p=x,q=m,i=x;92 merge_sort2(A,x,m,T);93 merge_sort2(A,m,y,T);94 while(p=y||(p
97 if(q>=y||(p=y||(p
99 else T[i++]=A[q++];100 }101 for(i=x;i
106 if(a.weight>b.weight) return 1;107 else if(a.weight
112 if(a.id>b.id) return 1;113 else if(a.id
118 int t=((struct obj *)a)->weight-((struct obj *)b)->weight;119 if(t>0) return 1;120 else if(t<0) return -1;121 else return 0;122 }123 int cmpQsort2(const void *a,const void *b)124 {//按struct obj的id比较a和b的大小
125 int t=((struct obj *)a)->id-((struct obj *)b)->id;126 if(t>0) return 1;127 else if(t<0) return -1;128 else return 0;129 }