您的位置:首页 > 编程语言 > C语言/C++

hdu 1031 Design T-Shirt

2016-04-17 15:07 525 查看
Source:
http://acm.hdu.edu.cn/showproblem.php?pid=1031
题目意思是要设计T恤,先输入N,M,K。表示一共有N个人对M个元素分别打分,最后在所有元素中选出K个得分最高的。

注意点:1.数据没有给限制,用动态数组分配内存。

                            2.打分为double型。

                            3.所选编号从大到小输出,如果有得分相同,输出编号小的。

                            4.每种情况一行输出,每两个编号之间用空格隔开,行末没有空格。

思路:1.先把每个element的总打分写入数组score[]。

            2.每次在可访问的元素中从前往后找最大值。

            3.找到后把最大值写入数组answer[],并在score[]中立flag表示visited。

            4.把answer数组排序。

            5.按格式输出answer。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
int n,m,k;
int i,j;
int pos;
double cur_score,max;
while(cin>>n>>m>>k)
{
int *flag=new int[m];
double *score=new double[m];
int *answer=new int[k];
///初始化
memset(flag,0,sizeof(int)*m);
memset(score,0.0,sizeof(double)*m);
///算分
for(i=1; i<=n; i++)
for(j=0; j<m; j++)
{
cin >> cur_score;
score[j] += cur_score;
}
///计算
for(i=0; i<k; i++)
{
pos = -1;
max = 0.0;
for(j=0; j<m; j++)
{
if(flag[j] != 0)continue;//visited
if(score[j] > max)
{
max = score[j];
pos = j;
}
}
answer[i] = pos + 1;//编号=下标+1
flag[pos] = 1;
}
sort(answer,answer + k);
///输出
for(i=k-1; i>0; i--)
cout<<answer[i]<<" ";
cout<<answer[0]<<endl;
///释放
delete[] flag;
delete[] score;
delete[] answer;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ hdu