hdu 4422(水)

点击打开链接


题目意思难懂一些,懂了就过来。

一共有5座山,每座山有很多的蘑菇,给你一个n表示已经采了n座山上的蘑菇,求最多带回去多少蘑菇。。

当采完5座山后,有三个人要走三个袋子,这三个的袋子的蘑菇数量为1024的倍数,如果没有三个袋子的蘑菇数目满足情况,则收回5个袋子,即不能带走任何蘑菇。

并且回家的路上有人偷蘑菇,一周偷,直到你总蘑菇数不大于1024;


分析:

如果是n小于4,至少有2座山的蘑菇没有采,则肯定有三个袋子总数够1024,所以最多带1024回家。

n=4时,可能有三个袋子蘑菇数=1024,如果没有,取剩下两个的最大值。其他两个再加上最后一座山采的够1024;

如果有,则肯定可以带1024个(最后一座山多采点)。

n=5,如果有三个袋子蘑菇数的和%1024==0,则取最大剩余。

没有的话,肯定被没收所有的袋子,ans=0;



#include"stdio.h"
#include"string.h"
int main()
{
	int n;
	int A[5];
	int i,j,k;
	while(scanf("%d",&n)!=-1)
	{
		for(i=0;i<n;i++)
			scanf("%d",&A[i]);
		if(n<4)printf("1024\n");
		else if(n==4)
		{
			int t;
			int ans;
			ans=0;
			for(i=0;i<n;i++)
			{
				for(j=i+1;j<n;j++)
				{
					t=A[i]+A[j];
					while(t>1024)t-=1024;
					if(t>ans)ans=t;
				}
			}
			for(i=0;i<n;i++)
			{
				for(j=i+1;j<n;j++)
				{
					for(k=j+1;k<n;k++)
						if((A[i]+A[j]+A[k])%1024==0)ans=1024;
				}
			}
			printf("%d\n",ans);
		}
		else if(n==5)
		{
			int t;
			int sum;
			int ans;
			ans=0;
			sum=A[0]+A[1]+A[2]+A[3]+A[4];
			for(i=0;i<n;i++)
			{
				for(j=i+1;j<n;j++)
				{
					for(k=j+1;k<n;k++)
					{
						if((A[i]+A[j]+A[k])%1024==0)
						{
							t=sum-A[i]-A[j]-A[k];
							while(t>1024)t-=1024;
							if(ans<t)ans=t;
						}
					}
				}
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值