Mother's Milk
2024-08-30 05:14:24
分析:我们用vis[i][j][k]来记录A,B,C三个状态是否被访问过,同时用s[i]来记录C的所有可能值,当i==0时,如果j合法,则标记s[k]=1,最后统计所有为1的s即可
/*
PROB:milk3
ID:wanghan
LANG:C++
*/
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "vector"
using namespace std;
const int maxn=;
int vis[maxn][maxn][maxn];
int s[maxn];
int A,B,C;
void dfs(int i,int j,int k){
if(vis[i][j][k]) return;
if(i>A||j>B||k>C) return;
if(i==){
s[k]=;
}
vis[i][j][k]=;
if(k>=A-i) //C->A
dfs(A,j,k-(A-i));
else
dfs(i+k,j,);
if(k>=B-j) //C->B
dfs(i,B,k-(B-j));
else
dfs(i,j+k,);
if(i>=C-k) //A->C
dfs(i-(C-k),j,C);
else
dfs(,j,k+i);
if(j>=C-k) //B->C
dfs(i,j-(C-k),C);
else
dfs(i,,j+k);
if(i>=B-j) //A->B
dfs(i-(B-j),B,k);
else
dfs(,i+j,k);
if(j>=A-i) //B->A
dfs(A,j-(A-i),k);
else
dfs(i+j,,k);
}
int main()
{
freopen("milk3.in","r",stdin);
freopen("milk3.out","w",stdout);
cin>>A>>B>>C;
memset(vis,,sizeof(vis));
memset(s,,sizeof(s));
dfs(,,C);
vector<int> h;
for(int i=;i<=C;i++)
if(s[i])
h.push_back(i);
for(int i=;i<h.size();i++){
if(i==h.size()-)
cout<<h[i]<<endl;
else
cout<<h[i]<<" ";
}
return ;
}
最新文章
- 安全测试 - 抓包工具BurpSuite
- 修改项目生成Gemfile的模板
- C# Like参数化 小记
- js 实现angylar.js view层和model层双绑定(改变view刷新 model,改变model自动刷新view)
- sql深入理解
- sh.exe";: grunt: command not found
- android studio简易了解第二部分
- C语言中的%0nd,%nd,%-nd
- <;a>;标签的href属性
- webpack的配置及使用
- Tree(未解决。。。)
- 做自己的PHP语法解释器
- 汽车Vin码识别——可以嵌入到手机里的新OCR识别技术
- border-image的拉伸和平铺
- CSS3@media媒体查询
- 牛客小白月赛13 小A的最短路(lca+RMQ)
- CSAPP:第三章程序的机器级表示2
- div “下沉”
- 【python基础】迭代器和生成器函数
- python随笔 join 字典,列表的清空 set集合 以及深浅拷贝(重点..难点)