鱼C论坛

 找回密码
 立即注册
查看: 1250|回复: 1

[技术交流] 洛谷题目 P1215

[复制链接]
发表于 2020-8-20 15:04:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2020-8-20 15:06 编辑

洛谷题目 P1215


原题

1.png
1.png

我的代码
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2020-8-22 15:40:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 07:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表