[白俊]#3980選抜リスト
質問する
サッカーの欧州チャンピオンズリーグ決勝進出を決めたマンチェスター・ユナイテッドのファーガソン監督は、今大会で4−2のダイヤモンド戦術を駆使する.
今日の決勝戦の11人の先発選手は事前に選ばれたが、どの選手をどの位置に配置すべきかはまだ決まっていない.
マイク・ペラン首席コーチは、11人の選手のそれぞれのポジションでの能力を0から100の整数に量子化した.0はその選手がその位置に合わないことを示している.
このとき、すべての選手の位置を決めるプログラムを作成してください.すべてのポジションは選手を配置し、各選手は能力値が0のポジションに配置できない.
入力
入力は、複数のテスト・インスタンスから構成されます.第1行は、試験例の個数Cを与える.各キャビネットは11行で構成され、i番のパッケージには0と100の間の11個の整数sijが含まれています.sijはi番選手がj番ポジションで走るときの能力です.全選手にふさわしいポジションは最大5つ.(コンピテンシー値が0より大きい)
しゅつりょく
各テストケースについて、すべてのポジションの選手が満たされると、能力値の和の最値が出力されます.常に1つ以上の正しいラインナップを創造することができます.
入力例1
1
100 0 0 0 0 0 0 0 0 0 0
0 80 70 70 60 0 0 0 0 0 0
0 40 90 90 40 0 0 0 0 0 0
0 40 85 85 33 0 0 0 0 0 0
0 70 60 60 85 0 0 0 0 0 0
0 0 0 0 0 95 70 60 60 0 0
0 45 0 0 0 80 90 50 70 0 0
0 0 0 0 0 40 90 90 40 70 0
0 0 0 0 0 0 50 70 85 50 0
0 0 0 0 0 0 66 60 0 80 80
0 0 0 0 0 0 50 50 0 90 88
サンプル出力1
970
に答える
この問題はdfs(深さ優先探索)アルゴリズムで解くことができる.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static ArrayList<Pos>[] list;
static int ans;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
list = new ArrayList[11];
for(int j=0; j<11; j++)
list[j] = new ArrayList<>();
ans = Integer.MIN_VALUE;
for(int j=0; j<11; j++) {
String[] input = br.readLine().split(" ");
for(int k=0; k<11; k++) {
int x = Integer.parseInt(input[k]);
if(x>0)
list[j].add(new Pos(x, k));
}
}
dfs(new int[11], 0);
System.out.println(ans);
}
}
public static void dfs(int[] score, int num) {
if(num==11) {
boolean flag = false;
int sum = 0;
for(int idx=0; idx<11; idx++) {
if(score[idx]!=0)
sum += score[idx];
else {
flag = true;
break;
}
}
if(!flag)
ans = Math.max(sum, ans);
return;
}
for(int i=0; i<list[num].size(); i++) {
Pos temp = list[num].get(i);
if(score[temp.idx]==0) {
score[temp.idx] = temp.x;
dfs(score, num+1);
score[temp.idx] = 0;
}
}
}
public static class Pos{
int x;
int idx;
public Pos(int x, int idx){
this.x = x;
this.idx = idx;
}
}
}
Reference
この問題について([白俊]#3980選抜リスト), 我々は、より多くの情報をここで見つけました https://velog.io/@pss407/백준3980-선발-명단テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol