zoukankan      html  css  js  c++  java
  • SGU 549 解题报告

    题意:给定你n个哑铃,每个哑铃都有质量和价格两个属性,要你把它分为k个一组;分组要求为,每组哑铃数相同,同一组内哑铃质量不同,不同组内哑铃质量必须一一相同,问你最多能分成多少组(如果有 组数 相同的组合,输出总花费最大的那个方案)

    解题思路:用结构体数组 list 存储哑铃,然后在哑铃质量的基础上对花费进行从大到小的排序(把哑铃按照质量在数组中分为不同的堆),然后用  因为哑铃的质量比较小,所以我们用   hash 数组(结构体   包含这个值第一次在lish出现的位置   和 它的个数   )对不同质量的进行统计, 然后对 hash 中的 个数 进行排序,  就能知道可以得出几组,然后在  通过  hash 对list 数组进行计算,,就能得出最大的花费是多少

    解题代码:

      1 // File Name: h.c
      2 // Author: darkdream
      3 // Created Time: 2013年07月18日 星期四 16时51分06秒
      4 
      5 #include<stdio.h>
      6 #include<string.h>
      7 #include<stdlib.h>
      8 #include<time.h>
      9 #include<math.h>
     10 #include<ctype.h>
     11 struct node
     12 {
     13     int m,c;
     14 }list[4005];
     15 struct Hash
     16 {
     17     int sit,num;
     18 }hash[4005];
     19 int ans[4005];
     20 int nodecmp(const void *b ,const void * a)
     21 {
     22     if( (*(node*)a).m != (*(node *)b).m)
     23         return (*(node *)a).m - (*(node *) b).m;
     24     else return (*(node*)a).c - (*(node *)b).c;
     25 }
     26 int intcmp(const void *a,const void *b)
     27 {
     28     return *(int *)b -*(int *)a;
     29 }
     30 int hashcmp(const void *a ,const void *b)
     31 {
     32     return (*(Hash *)b).num - (*(Hash *)a).num;
     33 }
     34 int main(){
     35 
     36     //freopen("/home/plac/problem/input.txt","r",stdin);
     37     //freopen("/home/plac/problem/output.txt","w",stdout);
     38     int n ,k ; 
     39     while(scanf("%d %d",&n,&k)!= EOF)
     40     {
     41         memset(list,0,sizeof(list));
     42         memset(hash,0,sizeof(hash));
     43         memset(ans,0,sizeof(ans));
     44         for(int i = 1;i <= n;i ++)
     45         {
     46             scanf("%d %d",&list[i].m,&list[i].c);
     47         }
     48 
     49 
     50         qsort(list+1,n,sizeof(node),nodecmp);
     51         for(int i= 1;i <= n; i ++)
     52         {
     53             if(list[i].m != list[i-1].m)
     54             {
     55                 hash[list[i].m].sit = i ; 
     56             }
     57             hash[list[i].m].num ++;
     58         }
     59         /* for(int i = 1;i <= n;i ++)
     60            {
     61            printf("****%d %d
    ",list[i].m,list[i].c);
     62            }*/
     63 
     64         qsort(hash+1,4000,sizeof(Hash),hashcmp);
     65         int up = 0 ;
     66         int ok = 1 ;
     67         /*for(int i= 1;i <= 7 ;i ++)
     68           printf("%d ",hash[i].num);
     69           printf("
    "); */
     70 
     71         if(hash[k].num == 0)
     72             ok = 0 ;
     73 
     74         if(ok)
     75         {
     76             int pre = 0 ;
     77             for(up = k; up <= 4000 ;  )
     78             {
     79                 if(hash[up+1].num == hash[up].num)
     80                 {
     81                     up++;
     82                 }
     83                 else break;
     84             }
     85               
     86             for(int i = 1; i <= up;i ++)
     87             {
     88                 pre ++;
     89                 ans[pre] = 0 ; 
     90                 for(int j = hash[i].sit; j <= hash[i].sit + hash[k].num -1 ; j++)
     91                 {
     92                     ans[pre] += list[j].c;
     93                 }
     94                 //printf("????????%d
    ",ans[pre]);
     95             }
     96             qsort(ans+1,pre,sizeof(int),intcmp);
     97             int sum = 0 ;
     98             for(int i= 1;i <= k ;i ++)
     99                 sum += ans[i];
    100             printf("%d %d
    ",hash[k].num,sum);
    101 
    102         }
    103         else 
    104             printf("0 0
    ");
    105     }
    106 
    107     return 0 ;
    108 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    bzoj3688 折线统计
    bzoj3678 wangxz与OJ
    「6月雅礼集训 2017 Day8」route
    「6月雅礼集训 2017 Day8」gcd
    [ SHELL编程 ] 编程常用的ORACLE相关命令
    Oracle数据库备份/导入工具
    Oracle数据文件迁移到裸设备
    Oracle数据文件转移操作
    Oracle重建表空间操作实例
    Linux性能测试分析命令_sar
  • 原文地址:https://www.cnblogs.com/zyue/p/3199014.html
Copyright © 2011-2022 走看看