|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zltzlt 于 2020-8-20 15:06 编辑
洛谷题目 P1215
原题
我的代码
- #include <bits/stdc++.h>
- using namespace std;
- int a, b, c, visited[20][20][20];
- set<int> res;
- set<int>::iterator it;
- void dfs(int cura, int curb, int curc)
- {
- // 如果当前状态重复了就直接返回
- if (visited[cura][curb][curc])
- return;
- // 如果当前 a 桶为空就将 c 桶的状态保存
- if (!cura)
- res.insert(curc);
- visited[cura][curb][curc] = 1;
- if (cura)
- {
- // A 桶往 B 桶倒
- dfs(((b - curb) >= cura) ? 0 : cura - (b - curb),
- ((b - curb) < cura) ? b : (curb + cura), curc);
- // A 桶往 C 桶倒
- dfs(((c - curc) >= cura) ? 0 : cura - (c - curc),
- curb, ((c - curc) < cura) ? c : (curc + cura));
- }
- if (curb)
- {
- // B 桶往 A 桶倒
- dfs(((a - cura) < curb) ? a : (curb + cura),
- ((a - cura) >= curb) ? 0 : curb - (a - cura), curc);
- // B 桶往 C 桶倒
- dfs(cura, ((c - curc) >= curb) ? 0 : curb - (c - curc),
- ((c - curc) < curb) ? c : (curb + curc));
- }
- if (curc)
- {
- // C 桶往 A 桶倒
- dfs(((a - cura) < curc) ? a : (curc + cura), curb,
- ((a - cura) >= curc) ? 0 : curc - (a - cura));
- // C 桶往 B 桶倒
- dfs(cura, ((b - curb) < curc) ? b : (curc + curb),
- ((b - curb) >= curc) ? 0 : curc - (b - curb));
- }
- }
- int main()
- {
- cin >> a >> b >> c;
- dfs(0, 0, c);
- for (it = res.begin(); it != res.end(); it++)
- cout << *it << ' ';
- return 0;
- }
复制代码 |
|