2424. Back and Forth

2424. Back and Forth题目描述

题目描述

Farmer John有两个挤奶棚,每个挤奶棚里各有一个奶罐和一个装有10个各种尺寸的桶的储物柜。他喜欢将在两个挤奶棚之间来回运送牛奶作为一种锻炼方式。
周一,Farmer John量了恰好1000加仑的牛奶放在第一个挤奶棚的奶罐里,又量了恰好1000加仑的牛奶放在第二个挤奶棚的奶罐里。
周二,他从第一个挤奶棚里取出一个桶,并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周三,他从第二个挤奶棚里取出一个桶(可能是周二留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
周四,他从第一个挤奶棚里取出一个桶(可能是周三留在这里的),并装满牛奶,然后将牛奶运到第二个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第二个挤奶棚。
周五,他从第二个挤奶棚里取出一个桶(可能是周二或周四留在这里的),并装满牛奶,然后将牛奶运到第一个挤奶棚,并将牛奶倒进奶罐。他把这个桶留在了第一个挤奶棚。
此时Farmer John测量了第一个挤奶棚的奶罐里的牛奶。他总共可能得到多少种不同的读数?

输入

输入的第一行包含10个整数,为第一个挤奶棚里初始的桶的容积。输入的第二行也包含10个整数,为第二个挤奶棚里初始的桶的容积。所有桶的容积均在1…100的范围内。

输出

输出Farmer John在周五之后测量第一个挤奶棚里的奶罐的牛奶时可能得到的读数的数量。

样例输入

1 1 1 1 1 1 1 1 1 2
5 5 5 5 5 5 5 5 5 5

样例输出

5

数据范围限制

提示
在这个例子中,最后第一个挤奶棚的奶罐中的牛奶量总共有5种可能的结果:
1000:FJ可以在每次往返的时候都携带同一个桶,从而不会改变第一个挤奶棚的奶罐的牛奶量。
1003:FJ可以在周二运送2个单位,周三5个单位,周四1个单位,周五1个单位。
1004:FJ可以在周二运送1个单位,周三5个单位,周四1个单位,周五1个单位。
1007:FJ可以在周二运送1个单位,周三5个单位,周四2个单位,周五5个单位。
1008:FJ可以在周二运送1个单位,周三5个单位,周四1个单位,周五5个单位。

思路:
题目大意可简化为:有一个变量X,初值为1000.我们可以将两个挤奶棚中的桶分别看成是a,b数组中的元素,进行了四次操作(- + - +,具体看题意)。最后问操作后X有多少种不同的值。
这道题的难点就是怎样去枚举所有的操作。
仔细想想,虽然有超级多种,但基于只有区区二十种元素,且各元素都不大(1~100)。所以我们可以考虑用暴力。
众多操作其实只有三种:

  1. 全白干 (每次往返的时候都携带同一个桶)
  2. 两次白干 (原理同上,只干了两天的活)
  3. 给两个,还两个(桶号都不同)

前两种都很好理解,第三种要用到排列组合(乘法原理)

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e2;
int a[N],b[N],ans;
bool vis[2000];
void input()
{
	for(int i=1;i<=10;i++) scanf("%d",&a[i]);
	for(int i=1;i<=10;i++) scanf("%d",&b[i]);
}
void work()
{
	vis[1000]=1; //白干
	for(int i=1;i<=10;i++) //有两天白干 
	for(int j=1;j<=10;j++) 
		vis[1000-a[i]+b[j]]=1;
		
	for(int i=1;i<=9;i++)	//给两个,还两个(桶号都不同) 
	for(int j=1;j<=9;j++)
	for(int x=i+1;x<=10;x++)
	for(int y=j+1;y<=10;y++)
		vis[1000-a[i]+b[j]-a[x]+b[y]]=1;
		
	for(int i=800;i<=1198;i++) 
	if(vis[i]) ans++;
}
int main()
{
	//fre(backforth);
	input();
	work();
	printf("%d",ans);
	return 0;
}
发布了130 篇原创文章 · 获赞 93 · 访问量 6791

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/105603231