Design T-Shirt问题:c++

4 篇文章 0 订阅

【问题描述】
他决定为我们的自由市BBS算法板T恤设计后不久,XKA发现他被各种建议从板上的每个人。让每个人都完全满意确实是一件不可能的事。所以他参加了民意调查来收集人们的意见。这是他所获得的:N人投票给M设计元素(如设计LOGO,大牌在计算机科学中,著名的图,等)。每个人都给每个元素分配了一些满足感。然而,节能只能把K(<= m)的元素融入自己的设计。他需要你为他挑选K元素,使总满意度最大化。
【输入】
输入由多个测试用例组成。对于每一种情况下,第一行包含三个正整数n,m和k n是数人,M是设计元素的数目,和K元素节能数量将把他的设计。然后n行跟随,每一个包含m个数。在第i行第j个数表示第j个元素的第i个人的满意度。
【输出】
对于每一个测试案例,打印一行指标的K元素你会建议节能考虑,满意度总数量最大化。如果有多个解决方案,则必须输出具有最小索引的解决方案。索引从1开始,必须以非递增顺序打印。在两个相邻的索引之间必须有一个空格,在行的最后没有多余的空格。
【输入输出样例】
in
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
out
6 5 3 1
2 1
【源程序清单】

#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;  
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值