首页 > ACM题库 > HDU-杭电 > HDU 1031 Design T-Shirt-排序-[解题报告] C++
2013
11-26

HDU 1031 Design T-Shirt-排序-[解题报告] C++

Design T-Shirt

问题描述 :

Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA found that he was trapped by all kinds of suggestions from everyone on the board. It is indeed a mission-impossible to have everybody perfectly satisfied. So he took a poll to collect people’s opinions. Here are what he obtained: N people voted for M design elements (such as the ACM-ICPC logo, big names in computer science, well-known graphs, etc.). Everyone assigned each element a number of satisfaction. However, XKA can only put K (<=M) elements into his design. He needs you to pick for him the K elements such that the total number of satisfaction is maximized.

输入:

The input consists of multiple test cases. For each case, the first line contains three positive integers N, M and K where N is the number of people, M is the number of design elements, and K is the number of elements XKA will put into his design. Then N lines follow, each contains M numbers. The j-th number in the i-th line represents the i-th person’s satisfaction on the j-th element.

输出:

For each test case, print in one line the indices of the K elements you would suggest XKA to take into consideration so that the total number of satisfaction is maximized. If there are more than one solutions, you must output the one with minimal indices. The indices start from 1 and must be printed in non-increasing order. There must be exactly one space between two adjacent indices, and no extra space at the end of the line.

样例输入:

3 6 4
2 2.5 5 1 3 4
5 1 3.5 2 2 2
1 1 1 1 1 10
3 3 2
1 2 3
2 3 1
3 1 2

样例输出:

6 5 3 1
2 1

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1031

题意 先按满意度排序,再按序号输出。

思路 数据量并不大 用个结构体,用一般的排序就可以。

1 #include<stdio.h>
 2 #include<string.h>
 3 struct s
 4 {
 5     int num;
 6     double mark;
 7 }a[1000],t;
 8 int main()
 9 {
10     int n,m,k,i,j,o,s;
11     double d;
12     while(~scanf("%d %d %d",&n,&m,&k))
13     {
14         for(i=0;i<m;i++)
15         {
16             a[i].mark=0;
17         }
18         while(n--)
19         {
20             for(i=0;i<m;i++)
21             {
22                 scanf("%lf",&d);
23                 a[i].mark+=d;
24                 a[i].num=i+1;
25             }
26         }
27         for(i=0;i<m-1;i++)
28         for(j=i+1;j<m;j++)
29         {
30             if(a[i].mark<a[j].mark)
31             {
32              t=a[i];a[i]=a[j];a[j]=t;
33             }
34         }
35         for(i=0;i<k-1;i++)
36         for(j=i+1;j<k;j++)
37         {
38             if(a[i].num<a[j].num)
39             {
40                 t=a[i];a[i]=a[j];a[j]=t;
41             }
42         }
43         for(i=0;i<k-1;i++)
44         {
45             printf("%d ",a[i].num);
46         }
47         printf("%d",a[i].num);
48         puts("");
49     }
50     return 0;
51 
52 }

  1. [email protected]

  2. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。