zoukankan      html  css  js  c++  java
  • 计蒜客--无脑博士的试管们

    题目链接:https://nanti.jisuanke.com/t/31

    题意:三只试管的容量分布是A、B、C,现在A,B两个试管是空的,C试管是满的,试管之间可以倒来倒去,求当A试管是空的时候,C试管中试剂的体积

    题解:把所有情况深搜,记忆化数组防止重复搜索,比较经典的DFS

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int A,B,C;
    int vis[25][25][25];
    vector<int> ans;
    void dfs(int a,int b,int c){
        if(vis[a][b][c]) return;
        vis[a][b][c]=1;
        if(a==0) ans.push_back(c);
        //把a杯子的水放进b杯子
        if(a<=B-b) dfs(0,a+b,c);
        else dfs(a+b-B,B,c);
        //把b杯子的水放进a杯子
        if(b<=A-a) dfs(a+b,0,c);
        else dfs(A,a+b-A,c);
        //把a杯子的水放进c杯子
        if(a<=C-c) dfs(0,b,a+c);
        else dfs(a+c-C,b,C);
        //把c杯子的水放进a杯子
        if(c<=A-a) dfs(a+c,b,0);
        else dfs(a,b+c-C,C);
        //把b杯子的水放进c杯子
        if(b<=C-c) dfs(a,0,b+c);
        else dfs(a,b+c-C,C);
        //把c杯子的水放进b杯子
        if(c<=B-b) dfs(a,b+c,0);
        else dfs(a,B,b+c-B);
    }
    
    int main(){
        while(cin>>A>>B>>C){
            memset(vis,0,sizeof(vis));
            ans.clear();
            dfs(0,0,C);
            sort(ans.begin(),ans.end());
            for(int i=0;i<ans.size();i++){
                printf("%d%c",ans[i],i==ans.size()-1?'
    ':' ');
            }
        }
    }
    每一个不曾刷题的日子 都是对生命的辜负 从弱小到强大,需要一段时间的沉淀,就是现在了 ~buerdepepeqi
  • 相关阅读:
    Redis
    元类 metaclass
    聊一聊 Django 中间件
    Django rest framework
    聊一聊python的单例模式
    Django-admin管理工具
    MongoDB
    Beautifulsoup
    三、模型(一)
    九、Python发送QQ邮件(SMTP)
  • 原文地址:https://www.cnblogs.com/buerdepepeqi/p/9876115.html
Copyright © 2011-2022 走看看