Altered
This commit is contained in:
63
Algorithm/DS-Related/Graph/DFS/UVa10603-Fill.cpp
Normal file
63
Algorithm/DS-Related/Graph/DFS/UVa10603-Fill.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
bool have = false;
|
||||
set<tuple<int,int,int>> visited;
|
||||
|
||||
int A, B, C; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
void dfs(int a, int b, int c, int target) {
|
||||
if (a == target || b == target || c == target) {
|
||||
have = true;
|
||||
return;
|
||||
}
|
||||
|
||||
auto state = make_tuple(a, b, c);
|
||||
if (visited.find(state) != visited.end()) return;
|
||||
visited.insert(state);
|
||||
|
||||
// <20><><EFBFBD>ֵ<EFBFBD>ˮ<EFBFBD><CBAE><EFBFBD><EFBFBD>
|
||||
// a -> b
|
||||
{
|
||||
int pour = min(a, B - b);
|
||||
dfs(a - pour, b + pour, c, target);
|
||||
}
|
||||
// a -> c
|
||||
{
|
||||
int pour = min(a, C - c);
|
||||
dfs(a - pour, b, c + pour, target);
|
||||
}
|
||||
// b -> a
|
||||
{
|
||||
int pour = min(b, A - a);
|
||||
dfs(a + pour, b - pour, c, target);
|
||||
}
|
||||
// b -> c
|
||||
{
|
||||
int pour = min(b, C - c);
|
||||
dfs(a, b - pour, c + pour, target);
|
||||
}
|
||||
// c -> a
|
||||
{
|
||||
int pour = min(c, A - a);
|
||||
dfs(a + pour, b, c - pour, target);
|
||||
}
|
||||
// c -> b
|
||||
{
|
||||
int pour = min(c, B - b);
|
||||
dfs(a, b + pour, c - pour, target);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int target;
|
||||
cin >> A >> B >> C >> target;
|
||||
dfs(A, 0, 0, target); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> A װ<><D7B0>
|
||||
if (have) cout << "YES" << endl;
|
||||
else cout << "NO" << endl;
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user