题目的意思是:给你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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-08 09:20:16