• zoj3657The Little Girl who Picks Mushrooms


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

    题目之前没完全理解,感觉很难,后来才发现不一定5座山都要采到,就是说 n <= 5;

    然后分几种情况讨论,就可以了;

    当 n <=  3; 直接诶输出 1024 ;

    当 n == 5 ; 先找到三个和为1024的倍数的情况,然后,取剩下的两个数的和小于1024的部分;

    当 n == 4 ; 这种是最需要注意的地方,当找到三项和为1024的倍数时,直接输出1024

     否则直接找到小于1024 的两个数的和即可


    // File Name: poj3657.cpp
    // Author: bo_jwolf
    // Created Time: Tuesday, May 07, 2013 PM08:51:41 HKT
    
    #include<vector>
    #include<list>
    #include<map>
    #include<set>
    #include<deque>
    #include<stack>
    #include<queue>
    #include<bitset>
    #include<algorithm>
    #include<functional>
    #include<numeric>
    #include<utility>
    #include<sstream>
    #include<iostream>
    #include<iomanip>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<ctime>
    
    using namespace std;
    int i , j , z , x , y ;
    int a[ 6 ] ;
    int main()
    {
    	int n ;
    	int sum , ans , max ;
    	while( scanf( "%d" , &n ) != EOF )
    	{
    		sum = 0 ;
    		for( i = 0 ; i < n ; i++ )
    		{
    			scanf( "%d" , &a[ i ] ) ;
    			sum += a[ i ] ;
    		}
    		if(n >= 0 && n <= 3 )
    		{
    			printf( "1024\n" ) ;
    			continue ;
    		}
    			if( n == 5 )
    			{
    				ans = 0 ;
    				for( i = 0 ; i < 5 ; i++ )
    					for( j = i+1 ; j < 5 ; j++ )
    						for( z = j + 1 ; z < 5 ; z++ )
    							if( ( a[ i ] + a[ j ]  + a[ z ] ) % 1024 == 0 )
    							{
    								int tmp = sum - a[ i ] - a[ j ] - a[ z ] ;
    								while( tmp > 1024)
    									tmp -= 1024 ;
    								if( tmp > ans )
    									ans = tmp ;
    							}
    								printf( "%d\n" , ans );
    								continue ;
    						
    			}
    				if( n == 4 )
    				{
    					ans = 0 ;
    					for( i = 0 ; i < 4 ; i++ )
    						for( j = i + 1 ; j < 4 ; j++ )
    							for( z = j + 1 ; z < 4 ; z++ )
    							{
    								if( ( a[ i ] + a[ j ] + a[ z ] ) % 1024 == 0 )
    								{
    									ans = 1024 ;
    								}
    							}
    					if( ans > 0 )
    					{
    						printf( "1024\n" );
    						continue ;
    					}
    					for( i = 0 ; i < 4 ; i++ )
    						for( j = i + 1 ; j < 4 ; j++ )
    						{
    							int tmp = a[ i ] + a[ j ] ;
    							while( tmp > 1024 )
    								tmp -= 1024 ;
    							if( tmp > ans )
    								ans = tmp ;
    						}
    					printf( "%d\n" , ans ) ;
    					continue ;
    				}
    	}
    return 0;
    }


  • 相关阅读:
    shell eval命令
    嘟嘟嘟
    07 linkextractor的基本用法
    rabbitmq消息队列
    5. 哨兵集群
    4.主从同步
    3. redis持久化存储
    2. redis 安全
    1.redis基础
    06. scrapy的Request对象
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3065662.html
Copyright © 2020-2023  润新知