洛谷 P1215 [USACO1.4]母亲的牛奶 Mother's Milk

暴力枚举

#include<bits/stdc++.h>
using namespace std;
#define Max (int)(1e5+10)
typedef long long ll;
int p[100],a,b,c,num;
bool vis[25],key[25][25][25];
void bfs(int x,int y,int z,int step) {

	if(key[x][y][z])
	   return;
	else
	   key[x][y][z]=1;  
	    
	if(x==0) {
	    if(vis[z]==0)
	       {
	       	p[num++]=z;
	       	vis[z]=1;
		   }
	key[x][y][z]=1;
	//	return ; 就是这个地方卡了我好久,因为x=0, 
	//之后还能继续倒,还会在此基础上有很多情况,此时return 则会丢失许多情况 
	}
	if(step>50)
	  return ;
	if(x<a&&z>0)
		if(a-x>=z)
			bfs(x+z,y,0,step+1);
		else
			bfs(a,y,z-(a-x),step+1);
	if(x<a&&y>0)
		if(a-x>=y)
			bfs(x+y,0,z,step+1);
		else
			bfs(a,y-(a-x),z,step+1);

	if(y<b&&z>0)
		if(b-y>=z)
			bfs(x,y+z,0,step+1);
		else
		    bfs(x,b,z-(b-y),step+1);
	if(y<b&&x>0)
		if(b-y>=x)
			bfs(0,y+x,z,step+1);
		else
		    bfs(x-(b-y),b,z,step+1);


	if(z<c&&x>0)
		if(c-z>=x)
			bfs(0,y,z+x,step+1);
		else
			bfs(x-(c-z),y,c,step+1);
	if(z<c&&y>0)
		if(c-z>=y)
			bfs(x,0,z+y,step+1);
		else
			bfs(x,y-(c-z),c,step+1);


}
int main() {
	while(~scanf("%d%d%d",&a,&b,&c)) {
		num=1;
		memset(vis,0,sizeof vis);
		memset(key,0,sizeof key);
		p[0]=c;
		vis[c]=1;
		key[0][0][c]=1;
		if(a<=c)
		bfs(a,0,c-a,0),key[a][0][c-a]=1;
		else
		bfs(c,0,0,0),key[c][0][0]=1; 
		if(b<=c)
		bfs(0,b,c-b,0),key[0][b][c-b]=1;
		else
		bfs(0,c,0,0),key[0][c][0]=1; 
		sort(p,p+num);
		for(int i=0; i<num-1; i++)
			printf("%d ",p[i]);
		printf("%d\n",p[num-1]);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值