zoukankan      html  css  js  c++  java
  • Uva1377

    /*
    在n个刻度和他们的差里挑不超过7个刻度,0是固定的,最大的刻度肯定是最大值,然后剩下的dfs挑。
    */
    #include<bits/stdc++.h>
    
    #define inf 0x3f3f3f3f
    
    const int maxn=1000000;
    
    using namespace std;
    
    int n,m,h,maxx,minx,icase,tar_size,a[100+10],ans[100+10],tar[100+10],flag[maxn+10];
    
    int b[100+10];
    
    int fla[maxn+10],fla1[maxn+10];
    
    int add(int x,int siz){
       int cnt=0;
       for(int i=0;i<siz;i++){
            if(fla1[abs(a[i]-x)]){
                  fla[abs(a[i]-x)]++;
                  if(fla[abs(a[i]-x)]==1) cnt++;
            }
          //  if(fla1[x]&&a[i]!=0) {
          //  fla[x]++;
          // if(fla[x]==1) cnt++;
          //  }
       }
        return cnt;
    }
    
    void dele(int x,int siz){
       //int cnt=0;
       for(int i=0;i<siz;i++){
            if(fla1[abs(a[i]-x)]){
                 // if(fla[abs(a[i]-x)]>=1)
                  fla[abs(a[i]-x)]--;
            }
            //if(fla1[x]&&a[i]!=0)  fla[x]--;
       }
            //printf("%d
    ",cnt);
    }
    
    void dfs(int now,int res,int index){
      //printf("%d
    ",res);
      if(now>=7&&res<tar_size) return ;
      if(now<=7&&res==tar_size){
            //printf("0 ");
            //for(int i=0;i<now;i++)
            //printf("%d ",a[i]);
            //printf("
    ");
           //set<int>::iterator it=fla.begin();
      //for(;it!=fla.end();++it){
           // printf("%d ",*it);
      //}
     // printf("
    ");
    //printf("%d %d %d
    
    ",now,tar_size,res);
            if(minx>now) {
                    minx=now;
                    for(int i=0;i<now;i++) ans[i]=a[i];
            }
            return ;
      }
      for(int i=index;i<h;i++){
            //a[now]=tar[i];
            //if(tar[i]==maxx||tar[i]==0) continue;
            int s=add(tar[i],now);
            if(!s) {dele(tar[i],now);continue;}
           a[now]=tar[i];
           //printf("%d %d
    ",res+1,fla.size());
           //int s=fla.size();
          // s=(add(tar[i],now)-s);
            //printf("%d
    ",s);
            //if(!s) continue;
            dfs(now+1,res+s,i+1);
            dele(tar[i],now);
      }
    }
    
    int main()
    {
        while(scanf("%d",&n)!=EOF&&n){
            printf("Case %d:
    ",++icase);
            minx=inf,maxx=0,memset(a,0,sizeof(a)),memset(tar,0,sizeof(tar)),memset(flag,0,sizeof(flag));
            memset(b,0,sizeof(b)),memset(fla,0,sizeof(fla)),memset(fla1,0,sizeof(fla1));
            h=0;
            int q=0;
            for(int i=0;i<n;i++) {
                    scanf("%d",&m);
                    if(!flag[m]) tar[h++]=m,b[q++]=m,flag[m]=1,fla1[m]=1;
                    maxx=max(maxx,m);
            }
            sort(tar,tar+h);
            sort(b,b+h);
            //for(int i=0;i<h;i++) printf("%d
    ",b[i]);
            tar_size=h;
            for(int i=0;i<tar_size;i++){
                  for(int j=i+1;j<tar_size;j++){
                          if(!flag[tar[j]-tar[i]]) tar[h++]=tar[j]-tar[i],flag[tar[j]-tar[i]]=1;
                  }
            }
            //printf("%d %d
    ",tar_size,h);
            sort(tar,tar+h);
            //for(int i=0;i<h;i++) printf("%d
    ",tar[i]);
            //printf("%d
    ",fla.size());
            a[0]=0;
            fla[0]=1;
            dfs(1,0,0);
            sort(ans,ans+minx);
            printf("%d
    ",minx);
           // printf("0");
            for(int i=0;i<minx;i++) {
                    //if(ans[i]!=maxx&&ans[i]!=0)
                    if(!i)
                    printf("%d",ans[i]);
                    else printf(" %d",ans[i]);
            }
            printf("
    ");
            //printf(" %d
    ",maxx);
        }
        return 0;
    }
  • 相关阅读:
    linux查看用户组所有成员
    navicat for mysql 在Mac上安装后没有连接列表,就是左边的那一列连接项目怎么办?
    mysql启动问题access denied for user 'root'@'localhost'(using password:YES)
    phpcms多站点表单统一到主站点管理的解决方案
    thinkphp5.0 session驱动方式问题汇总
    Python__开启进程的两种方式
    Python并发编程之操作系统理论部分
    操作系统简介
    Python__基于udp的套接字
    网络编程1
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5460642.html
Copyright © 2011-2022 走看看