计蒜客--无脑博士的试管们
Posted buerdepepeqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客--无脑博士的试管们相关的知识,希望对你有一定的参考价值。
题目链接: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?‘ ‘:‘ ‘); } } }
以上是关于计蒜客--无脑博士的试管们的主要内容,如果未能解决你的问题,请参考以下文章