• zoj 3657 策略题 easy


    http://acm.zju.edu.cn/onlinejudge/showProblem.do?

    problemId=4880

    由于是要去牡丹江。是浙大出题,所以找了份浙大的题,第一道水题做的就不顺啊。题看不明确。然后枚举3个数的组合。循环条件竟然写错,二逼啊,这到现场肯定悲剧啊

    题意:
    一共同拥有5座山。有人拿5个篮子去採蘑菇。如今他已经採了几座山上的蘑菇。之后几座山的蘑菇数量你能够自己确定。

    可是他要交出3个篮子,且它们的和必须是1024的倍数。

    否则,剩余两个篮子也要交出。

    之后。假设剩余数量大于1024要减去1024直到不大于。问最后剩余的最大值。


    做法 分类讨论:
    1、n<=3  必定1024

    2、n==4   看3个篮子是从已有的4个里面出来的还是2+没採蘑菇的山

    3、n==5  分能不能找到2个篮子 weight%1024==0


    注意枚举3个数的组合的循环代码: 開始时,循环的開始竟然写错,。,

        for(int i=0;i<n-2;i++)
            for(int j=i+1;j<n-1;j++)
                for(int k=j+1;k<n;k++)
                {
                    int tmp=a[i]+a[j]+a[k];
                    if(tmp%1024 == 0)
                    {
                        flag=1;
                        tmp=sum-tmp;
                        while(tmp>1024)tmp-=1024;
                        ans=max(ans,tmp);
                    }
                }

    AC代码

    //#pragma comment(linker, "/STACK:102400000,102400000")
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <string>
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    #include <map>
    #include <set>
    #include <queue>
    using namespace std;
    
    #define ls(rt) rt*2
    #define rs(rt) rt*2+1
    #define ll long long
    #define ull unsigned long long
    #define rep(i,s,e) for(int i=s;i<e;i++)
    #define repe(i,s,e) for(int i=s;i<=e;i++)
    #define CL(a,b) memset(a,b,sizeof(a))
    #define IN(s) freopen(s,"r",stdin)
    #define OUT(s) freopen(s,"w",stdout)
    const ll ll_INF = ((ull)(-1))>>1;
    const double EPS = 1e-8;
    const double pi = acos(-1.0);
    const int INF = 100000000;
    const int MAXN = 10;
    int n;
    int a[MAXN];
    int sum;
    int ans=0;
    
    void solve4()
    {
        int flag=0;
        for(int i=0;i<n-2;i++)
            for(int j=i+1;j<n-1;j++)
                for(int k=j+1;k<n;k++)
                {
                    int tmp=a[i]+a[j]+a[k];
                    if(tmp%1024 == 0)
                    {
                        flag=1;
                        tmp=sum-tmp;
                        while(tmp>1024)tmp-=1024;
                        ans=max(ans,tmp);
                    }
                }
        if(flag)puts("1024");
        else
        {
            for(int i=0;i<n-1;i++)
                for(int j=i+1;j<n;j++)
                {
                    int tmp=a[i]+a[j];
                    while(tmp>1024)tmp-=1024;
                    ans=max(ans,tmp);
                }
            printf("%d
    ",ans);
        }
    }
    
    void solve5()
    {
        int flag=0;
        for(int i=0;i<n-2;i++)
            for(int j=i+1;j<n-1;j++)
                for(int k=j+1;k<n;k++)
                {
                    int tmp=a[i]+a[j]+a[k];
                    if(tmp%1024 == 0)
                    {
                        flag=1;
                        tmp=sum-tmp;
                        while(tmp>1024)tmp-=1024;
                        ans=max(ans,tmp);
                    }
                }
        if(flag)printf("%d
    ",ans);
        else puts("0");
    }
    
    int main()
    {
        //IN("zoj3657.txt");
        while(~scanf("%d",&n))
        {
            sum=0;
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]),sum+=a[i];
            ans=0;
            if(n<=3){puts("1024");continue;}
            if(n == 4)solve4();
            if(n == 5)solve5();
        }
        return 0;
    }
    


  • 相关阅读:
    怎样使用 Apache ab 以及 OneAPM 进行压力測试?
    opencv之haar特征+AdaBoos分类器算法流程(三)
    分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)
    REST API 调用 方法
    WebApi的安全性及其解决方案
    使用Topshelf创建Windows服务
    LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count
    sqlbulkcopy 多表批量保存
    C#使用HttpWebRequest和HttpWebResponse上传文件示例
    C#模拟客户端发送数据示例
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5342044.html
Copyright © 2020-2023  润新知