[白俊🔉][14501]退社問題の解説


  • 正解率:47.669%
  • クイズクリップ
  • 👓 問題の概要
    私たちのグループで最も努力し、最もお金を稼ぐために働いている優秀な従業員が辞めます.
    退職する前に、最も多くのお金を稼ぐ計画を立て、実行しなければならない.
    白俊多を助けてお金を稼ぎましょう.
    詳細については、Backjunのホームページを参照してください.問題に答える
    🔑 問題を解く
    私たち白俊はN+1日で辞めたので、N日まで仕事をしなければなりません.
    コンサルティングの完了に必要な日付は3日で、対応する日付は3日であることを覚えておいてください.
    これは典型的なDFS問題で、最初の日付からN日まで探索した後、いくら稼いだ可能性があるかをすべて調査したケースです.
    🥽 ソースコードとソースコード分析
    バックグラウンドサイトではなく、Visual Studioでコードを記述してインポートします.一部のコードにはテストコードが含まれています.
    #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    
    struct Task {
    	int period;
    	int earn;
    };
    using namespace std;
    void dfs(int idx, int endDay, int money);
    
    vector<Task> myTask;
    int myMoney = -1;
    int main() {
    
    	int TC;
    	cin >> TC;
    	myTask.assign(TC, {0, 0});
    	for (int i = 0; i < TC; i++)
    		cin >> myTask[i].period >> myTask[i].earn;
    
    	for (int i = 0; i < myTask.size(); i++)
    		if (myTask[i].period + i <= myTask.size())
    			dfs(i + 1, i + myTask[i].period, myTask[i].earn);
    	cout << myMoney;
    }
    //
    void dfs(int idx,int endDay,int money) {
    	for (int i = idx; i < myTask.size(); i++)
    		if(endDay <= i && myTask[i].period + i <= myTask.size())
    			dfs(i + 1, i + myTask[i].period, money + myTask[i].earn);
    	myMoney = max(myMoney, money);
    }
    🔨 問題ポスト
    これはDFSの典型的な問題としての基本的な問題である.
    私は問題を見間違えて、1時間変なことをした.
    会社を辞めるまで仕事に励んでいた白俊.
    優秀な部下がいるので、白俊の上司は気分が悪いかもしれません.