[BOJ/C+]18429号筋損
7568 ワード
この問題は後追跡によって解決された. nのサイクルではツールパッケージは1回しか使用できないため、このツールパッケージが使用されているかどうかを確認するためにbool型のchk配列を宣言します. 日数と現在の重量を表すcurを DFS関数のパラメータで加算します. DFS関数では、dayとnが等しい場合、curが500より大きい場合、cntが増加する. DFS関数では、for文を0からn-1に繰り返し、各繰り返しにインデックスのchkがfalseである場合、cur-k+kit[i]が500以上である場合、DFSを再呼び出します. 呼び出しが再帰される前にchk[i]をtrueに変更し、DFSのパラメータとしてday+1、cur-k+kit[i]を加えて再帰呼び出しを行う.再帰呼び出しの次の行ではすべての状況をチェックする必要があるため、chk[i]をfalseに変更することができます. DFS関数が完了したらcntを出力します.
#include <iostream>
#define MAX 9
using namespace std;
int n, k;
int kit[MAX];
bool chk[MAX];
int cnt=0;
void Input(){
cin>>n>>k;
for(int i=0; i<n; i++){
cin>>kit[i];
}
}
void DFS(int day, int cur){
if(day==n-1){
if(cur<500){
return;
}
else{
cnt++;
return;
}
}
for(int i=0; i<n; i++){
if(!chk[i]&&cur-k+kit[i]>=500){
chk[i]=true;
DFS(day+1, cur-k+kit[i]);
chk[i]=false;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0, 500);
cout<<cnt<<endl;
return 0;
}
Reference
この問題について([BOJ/C+]18429号筋損), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/BOJ-C-18429번-근손실テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol