ZOJ 3657 The Little Girl who Picks Mushrooms(12年长春区域赛-C题-枚举)

题目链接:Click here~~

题意:

一共有5座山,有人拿5个篮子去采蘑菇,现在他已经采了几座山上的蘑菇,之后几座山的蘑菇数量你可以自己确定。但是他要交出3个篮子,且它们的和必须是1024的倍数。否则,剩余两个篮子也要交出。之后,如果剩余数量大于1024要减去1024直到不大于。问最后剩余的最大值。

解题思路:

水题,WA了5次,我还以为是题意理解错了。。原来有坑。。交3个篮子的时候,它们的和可以是0。。

首先,看是否能满足第一个条件,其实,只有5个篮子数量已经全部确定的时候,才有可能不满足。

如果在满足的前提下,还能够保证剩余的篮子中有一个是可以自己确定蘑菇数量的,则最后一定能剩到1024(最大值)。否则,解也已经确定。

然后,更新最大解即可。

贴个简化后的代码。

#include <stdio.h>
#include <algorithm>

using namespace std;

int n,a[6],sum,ans;

bool mult(int x)
{
    return x%1024==0;
}

int calc(int x)
{
    while(x > 1024)
        x -= 1024;
    return x;
}

void solve()
{
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
            if(n==4  || mult(sum-a[i]-a[j]))
                ans = max(ans,calc(a[i]+a[j]));
}

int main()
{
    while(~scanf("%d",&n))
    {
        sum = 0,ans = 0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum += a[i];
        }
        if(n<=3)
            ans = 1024;
        else
            if(n==4)
                for(int i=0;i<4;i++)
                    if(mult(sum-a[i]))
                        ans = 1024;
        if(ans!=1024)
            solve();
        printf("%d\n",ans);
    }
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值