第十三回(マラソン第一回)
担当:zeke
ハル研究所プログラミングコンテスト
今日は先日行われたIntroduction to Heuristics Contestにチャレンジしていこうと思います
(難易度はABC-Bぐらい?実装するだけ)
ビームサーチの布石だったりする
…
…
…
…
…
うまくいくとたぶん62634806点が取れるはず?
long long evaluate(int contest, int date, vector<int> &prev_contest_date) {
// contest,date(何日目か),prev_contest_dateを渡す
/*評価計算*/
return /*その日の獲得得点を返す*/
}
int main(){
/*初手入力*/
vector<int> prev_contest_date(26,-1);
//それぞれのコンテストがいつ行われたか
vector<int> history;
//今まで何を選んだか
int res=0;
for(int date=0;date<D;date++){
priority_queue<pair<long long,int>> q;
//(獲得得点,コンテスト)を記録する
//priority_queue<pair>はpairの第一引数が降順になるように格納する
for(int contest=0;contest<26;contest++){
/*何かしらの処理をする*/
q.push({evaluate(contest, date, prev_contest_date),contest});
}
history.push_back(q.top().second+1);
res+=q.top().first
prev_contest_date[q.top().second]=date;
//記録する
}
/*出力*/
}
k
long long evaluate(int contest, int date, vector<int> &prev_contest_date) {
// contest,date(何日目か),prev_contest_dateを渡す
/*評価計算*/
return /*その日の獲得得点を返す*/
}
int main(){
/*初手入力*/
int res=0;
int width;
//ビームサーチの幅を決める
vector<tuple<long long,vector<int>,vector<int>>> width_info;
// tuple<現在までの獲得得点、それぞれのコンテストがいつ行われたか、今まで何を選んだか>
for(int date=0;date<D;date++){
for(auto state:width_info){
ll score = get<0>(state);
vector<int> prev_contest_date = get<1>(state);
vector<int> history = get<2>(state);
priority_queue<tuple<long long, vector<int>, vector<int>>> q;
//(獲得得点,コンテスト)を記録する
// priority_queue<pair>はpairの第一引数が降順になるように格納する
for (int contest = 0; contest < 26; contest++) {
/*何かしらの処理をする*/
q.push({evaluate(contest, date, prev_contest_date),prev_contest_date,history});
}
}
width_info.clear();
for(int i=0;i<width;i++){
/*幅の分だけ追加*/
}
}
/*出力*/
}