ZOJ Problem Set - 3657The Little Girl who Picks Mushrooms

来源:互联网 发布:linux编辑只读文件 编辑:程序博客网 时间:2024/06/05 00:15

The 2012 ACM-ICPC Asia Changchun Regional Contest-C

题目大意就是 5个数要求三个数和为1024,使得(其他两个数的和-1)%1024+1最大。


当n<=3时,答案显然是1024. n==4 先看有无三个数的和是1024的倍数,没有的话,只能靠第5个数构造,然后枚举期中两个数的和 ,取最大答案。

如果n=5 就是直接枚举答案了。


#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;int a[10];int n,ans;int max(int a,int b){return (a<b?b:a);}int main(){    while (cin>>n){          int sum=0;          for (int i=0;i<n;++i) scanf("%d",&a[i]),sum+=a[i];          if (n<=3) cout<<1024<<endl; else          {             if (n==4){                ans=0;                for (int i=0;i<n;++i)                    for (int j=i+1;j<n;++j)                    for (int k=j+1;k<n;++k)                    if ((a[i]+a[j]+a[k])%1024==0)                    ans=1024;                for (int i=0;i<n;++i)                    for (int j=i+1;j<n;++j)                    ans=max(ans,(sum-a[i]-a[j]-1)%1024+1);             } else             {                ans=0;                for (int i=0;i<n;++i)                    for (int j=i+1;j<n;++j)                    for (int k=j+1;k<n;++k)                    if ((a[i]+a[j]+a[k])%1024==0)                     ans=max(ans,(sum-a[i]-a[j]-a[k]-1)%1024+1);             }             cout<< ans << endl;          }    }    return 0;}


原创粉丝点击