[USACO18DEC]Back and Forth(G题)

链接:code forces
中文链接:洛谷P5118

题目大意:

FJ有两个挤奶棚,每个棚里面有一个奶罐,每个挤奶棚里面有10个容量大小不等的桶。
一共操作五次:

  1. 把每个奶罐里面加上1000加仑的牛奶
  2. 从棚1选一个桶,从奶罐里装满牛奶,倒到第二个棚的奶罐里,并把桶留在棚2
  3. 从棚2选一个桶,从奶罐里装满牛奶,倒到棚1,再把桶留下(此时拿走的桶可以是从棚1带过来的)
  4. 从棚1选一个桶,从奶罐里装满牛奶,倒到第二个棚的奶罐里,并把桶留在棚2
  5. 从棚2选一个桶,从奶罐里装满牛奶,倒到棚1,再把桶留下(此时拿走的桶可以是从棚1带过来的)
    问5次操作后,棚1里奶罐的奶量一共有多少种可能。

数据大小:

每个桶大小不超过100

思路:

其实只有四次操作,如果模拟的话复杂度为10 *11 *10 *11(1e4大小)完全可行,那就模拟吧,哈哈~
(本来担心会不会出现把某一个奶罐取完,但是数据大小限制保证了不会出现这种情况了)
ac代码:

#include<iostream>
#include<cstdio>
ng namespace std;
typedef long long ll;
bool tank[20000];
bool tank1[20000];//负数
int main()
{
	int a[12],b[12];
	for(int i = 1;i<=10;i++)
		scanf("%d",&a[i]);
	for(int i = 1;i<=10;i++)
		scanf("%d",&b[i]);
	for(int i = 1;i<=10;i++)
	{
		int temp1 = 0;
		temp1-=a[i];
		b[11] = a[i];
		a[i] = 0;
		for(int j = 1;j<=11;j++)
		{
			int temp2 = temp1+b[j];
			a[i] = b[j];
			b[j] = 0;
			for(int k = 1;k<=10;k++)
			{
				int temp3=temp2-a[k];
				b[j] = a[k];
				a[k] = 0;
				for(int l = 1;l<=11;l++)
				{
					int temp4 = temp3+b[l];
					if(temp4>=0)
						tank[temp4] = 1;
					else
						tank1[-temp4] = 1;
				}
				a[k] = b[j];
				b[j] = 0;
			}
			b[j] = a[i];
			a[i] = 0;
		}
		a[i] = b[11];
		b[11] = 0;

	}
	int tot = 0;
	for(int i = 0;i<=15000;i++)
	{
		if(tank[i])
			tot++;
		if(tank1[i])
			tot++;
	}
	printf("%d",tot);

	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值