Design T-Shirt問題:c++

4141 ワード

【問題の説明】彼は私たちの自由市BBSアルゴリズムボードTシャツの設計を決定して間もなく、XKAは彼がボードの上のすべての人から様々な提案を受けていることを発見した.誰もが完全に満足するのは確かに不可能なことだ.だから彼は世論調査に参加して人々の意見を集めた.これは彼が得たものです:N人はM設計要素に投票します(例えばLOGOを設計して、大物はコンピュータ科学の中で、有名な図、など).誰もが要素ごとに満足感を割り当てています.しかし、省エネはK(<=m)の要素を自分のデザインに溶け込むしかない.彼はあなたが彼のためにK要素を選んで、総満足度を最大化する必要があります.【入力】入力は、複数の試験例からなる.それぞれの場合、第1行は3つの正の整数nを含み、mとk nは数人であり、Mは設計要素の数であり、K要素の省エネ数は彼の設計を行う.次にn行が追従し,それぞれm個の数を含む.i行目j番目の数は、j番目の要素のi番目の個人の満足度を表す.【出力】各テストケースについて、1行の指標を印刷するK要素は、省エネを考慮し、満足度の合計数を最大化することをお勧めします.複数のソリューションがある場合は、最小インデックスを持つソリューションを出力する必要があります.インデックスは1から、非増分順で印刷する必要があります.2つの隣接するインデックスの間にスペースが必要です.行の最後に余分なスペースはありません.【入出力サンプル】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 3 1 3 1 2 2 out 6 5 3 1 2 1【ソースプログラムリスト】
#include   
#include   
#include   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;  
}