C - The Little Girl who Picks Mushrooms HDU - 4422

10 篇文章 0 订阅

题目链接:点击打开链接

Alice 在五座山上采蘑菇,已知她已经采了 n 座山(0 <= n <= 5) ,且在她回家的路上 ,会被Sunny,Lunar 和 Star三个人抢走三袋蘑菇(三代蘑菇的重量必须整除1024,如果在这五代蘑菇中不存在三袋重量和能整除1024的,则她们将抢走所有蘑菇),并且Alice的邻居会偷走Alice的1024的倍数的蘑菇(若Alice的蘑菇不大于1024,则不偷,否则偷走1024的倍数的重量),问Alice能剩余的最大蘑菇重量为多少?

暑假集训的一道题,题意好理解,结果做了好长时间也没做出来,后来看了别人的代码,结果发现思路一样,代码写的也基本一样,实在不明白哪错,后来改了又改,才对了,气死人。(做这道题的时候我在想Alice过的是啥生活,感觉好悲惨啊!!!!!!!!!!!!!!!!!!!!!)

最后附上代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
    int n;
    int a[10];
    ios::sync_with_stdio(false);
    while(cin>>n){
       int sum=0;
       for(int i=0;i<n;i++){
          cin>>a[i]; sum+=a[i];
       }
       if(n<=3) cout<<1024<<endl;
       else if(n==4){
          int maxx=-100;
          for(int i=0;i<n;i++){
             if((sum-a[i])%1024==0){
                maxx=1023;
                break;
             }
          }
          for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
               maxx=max(maxx,(a[i]+a[j]-1)%1024);
            }
          }
          cout<<maxx+1<<endl;
       }
       else if(n==5){
         int mm=-1; int flag=0;
         for(int i=0;i<n;i++){
            sum-=a[i];
            for(int j=i+1;j<n;j++){
                sum-=a[j];
                if(sum%1024==0){
                    mm=max(mm,(a[i]+a[j]-1)%1024);
                }
                sum+=a[j];
            }
            sum+=a[i];
         }
         cout<<mm+1<<endl;
       }
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值