dfsを使った数列の全探索方法
解決したいこと
C++でAtCoder Beginner Contest 165 C - Many Requirementsを解いています。
適切な値が出ず困っています。
発生している問題・エラー
下記の問題を解いています。(URLですみません。)
例)
https://atcoder.jp/contests/abc165/tasks/abc165_c
該当するソースコード
#include <bits/stdc++.h>
using namespace std;
int N,M,Q,maxx=0,last;
vector<int> a(50),b(50),c(50),d(50);
string B;
void sub(string A){
if(A.size()==N) {
int sum=0;
for(int i=0; i<Q; i++){
if( (A.at(b.at(i)-1)-A.at(a.at(i)-1))==c.at(i) ) sum += d.at(i);
}
maxx=max(maxx,sum);
return ;
}
last=A.at(A.size()-1);
for(int i=last; i<=M; i++){
B = A;
B += ('0'+i);
sub(B);
}
}
int main() {
cin >> N >> M >> Q;
for(int i=0; i<Q; i++) cin >> a.at(i) >> b.at(i) >> c.at(i) >> d.at(i);
string A="1";
sub(A);
cout << maxx << endl;
}
自分で試したこと
3 4 3
1 3 3 100
1 2 2 10
2 3 2 10
の入力に110が出力されればよいのですが、0になってしまいます。
何度も見直しましたがわかりませんでした。。。
よろしくお願いいたします。
0