Design T-Shirt問題:c++
【問題の説明】彼は私たちの自由市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;
}