题目的意思是:给你N个人的对M个元素的满意度,需要添加K个元素到T-shirt上,使得满意度最大。很水的题目。
我的思路是,将各个元素的满意度加起来,排序,得到前K个满意度最大的。再将元素的编号进行排序,然后输出。
下面的是AC的代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
class data
{
public:
double num;
int c;
};
data b[500];
double a[500][500];
int cmp1(const data a, const data b) //结构体的从大到小排序
{
return a.num > b.num;
}
int cmp2(const int a, const int b) //从大到小排序
{
return a > b;
}
int main()
{
int n, m, k;
int i, j;
int ans[1000];
while(scanf("%d%d%d", &n, &m, &k) != EOF)
{
for(i = 0; i < n; i++) //输入
for(j = 0; j < m; j++)
scanf("%lf", &a[i][j]);
for(i = 0; i < m; i++) //算出各个元素的满意度,
{
b[i].num = 0.0;
b[i].c = i + 1; //标记编号,避免排序后乱了
for(j = 0; j < n; j++)
{
b[i].num += a[j][i];
}
}
sort(b, b + m, cmp1); //排序
for(i = 0; i < k; i++) //取前K个元素的标号
ans[i] = b[i].c;
sort(ans, ans + k, cmp2); //排序,
for(i = 0; i < k; i++)
i == k - 1 ? cout << ans[i] << endl : cout << ans[i] << ' ';
}
return 0;
}