USACO 母亲的牛奶 Mother's Milk (DFS)

http://www.luogu.org/problem/show?pid=1215
舒爽的深搜题,只有六种转移方式都搜一下就好了
因为牛奶的量一定,所以知道aa,cc就可以知道bb,所以二维即可
vis[aa][cc]判重,aa=0时令s[cc]=1,最后输出s[i]为1的i值

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b,c;
bool vis[25][25],s[25];
void dfs(int aa,int cc)
{
    if(vis[aa][cc]==1)
    return ;
    vis[aa][cc]=1;
    if(aa==0)
    s[cc]=1;
    int bb=c-aa-cc;
    if(aa!=0&&bb!=b)
    dfs(aa-min(aa,b-bb),cc);//a->b
    if(aa!=0&&cc!=c)
    dfs(aa-min(aa,c-cc),cc+min(aa,c-cc));//a->c
    if(bb!=0&&aa!=a)
    dfs(aa+min(bb,a-aa),cc);//b->a
    if(bb!=0&&cc!=c)
    dfs(aa,cc+min(bb,c-cc));//b->c
    if(cc!=0&&aa!=a)
    dfs(aa+min(cc,a-aa),cc-min(cc,a-aa));//c->a
    if(cc!=0&&bb!=b)
    dfs(aa,cc-min(cc,b-bb));//c->b 
    return ;
}
int main()
{
    scanf("%d%d%d",&a,&b,&c);
    dfs(0,c); 
    for(int i=0;i<=c;i++)
    if(s[i]==1)
    printf("%d ",i);
    return 0;
} 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值