/*
在n个刻度和他们的差里挑不超过7个刻度,0是固定的,最大的刻度肯定是最大值,然后剩下的dfs挑。
*/
#include<bits/stdc++.h> #define inf 0x3f3f3f3f const int maxn=; using namespace std; int n,m,h,maxx,minx,icase,tar_size,a[+],ans[+],tar[+],flag[maxn+]; int b[+]; int fla[maxn+],fla1[maxn+]; int add(int x,int siz){
int cnt=;
for(int i=;i<siz;i++){
if(fla1[abs(a[i]-x)]){
fla[abs(a[i]-x)]++;
if(fla[abs(a[i]-x)]==) 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=;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\n",cnt);
} void dfs(int now,int res,int index){
//printf("%d\n",res);
if(now>=&&res<tar_size) return ;
if(now<=&&res==tar_size){
//printf("0 ");
//for(int i=0;i<now;i++)
//printf("%d ",a[i]);
//printf("\n");
//set<int>::iterator it=fla.begin();
//for(;it!=fla.end();++it){
// printf("%d ",*it);
//}
// printf("\n");
//printf("%d %d %d\n\n",now,tar_size,res);
if(minx>now) {
minx=now;
for(int i=;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\n",res+1,fla.size());
//int s=fla.size();
// s=(add(tar[i],now)-s);
//printf("%d\n",s);
//if(!s) continue;
dfs(now+,res+s,i+);
dele(tar[i],now);
}
} int main()
{
while(scanf("%d",&n)!=EOF&&n){
printf("Case %d:\n",++icase);
minx=inf,maxx=,memset(a,,sizeof(a)),memset(tar,,sizeof(tar)),memset(flag,,sizeof(flag));
memset(b,,sizeof(b)),memset(fla,,sizeof(fla)),memset(fla1,,sizeof(fla1));
h=;
int q=;
for(int i=;i<n;i++) {
scanf("%d",&m);
if(!flag[m]) tar[h++]=m,b[q++]=m,flag[m]=,fla1[m]=;
maxx=max(maxx,m);
}
sort(tar,tar+h);
sort(b,b+h);
//for(int i=0;i<h;i++) printf("%d\n",b[i]);
tar_size=h;
for(int i=;i<tar_size;i++){
for(int j=i+;j<tar_size;j++){
if(!flag[tar[j]-tar[i]]) tar[h++]=tar[j]-tar[i],flag[tar[j]-tar[i]]=;
}
}
//printf("%d %d\n",tar_size,h);
sort(tar,tar+h);
//for(int i=0;i<h;i++) printf("%d\n",tar[i]);
//printf("%d\n",fla.size());
a[]=;
fla[]=;
dfs(,,);
sort(ans,ans+minx);
printf("%d\n",minx);
// printf("0");
for(int i=;i<minx;i++) {
//if(ans[i]!=maxx&&ans[i]!=0)
if(!i)
printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
printf("\n");
//printf(" %d\n",maxx);
}
return ;
}

Uva1377的更多相关文章

  1. Win7_Ultimate + VS2010 + openGL_MFC单文档应用开发框架搭建步骤

    Win7_Ultimate + VS2010 + openGL单文档应用开发框架搭建步骤 上一个配置是基于OpenGL的开发工具配置的,下面就是基于Vs2010的MFC单文档应用开发. 通过网上查找资 ...

随机推荐

  1. 2018.3.1 RF module distance test part II-

    1 Test  circuit diagram 2  Test demo 3 Test record 4  Test  analysis 5 Test results and discussion E ...

  2. Speaking 1

    What clothes do you usually like to wear?Well I like fashionable clothes, but I also want to be comf ...

  3. BZOJ_3671_[Noi2014]随机数生成器_set+贪心

    BZOJ_3671_[Noi2014]随机数生成器_set Description   Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第 ...

  4. BZOJ4278 [ONTAK2015]Tasowanie[后缀数组+贪心]

    题目 求两数组归并后的数组最小字典序排列. 嘛,可能本人在贪心这块还是太弱了(或者说什么都弱),如果不知道是字符串题估计也想不起来用sa. 显然看得出归并时字典序小的那个数组先往里面加,这就是要比较两 ...

  5. 普通项目转为maven项目及相关操作说明

    普通项目转为maven项目及相关操作说明 1 原项目简述 如图,一般的项目大致包括三类路径:src,源码路径:test,单元测试路径:lib第三方类包路径. 示例项目中,BaseDao类依赖于mysq ...

  6. 前端PHP Session的实例

    登陆例子:(请注意一定要自己敲一遍,不要CV大法) 首先上一下成果图,激起同学们写的欲望,登录页如下:  点击登陆之后如下: 说明哦了,么问题.接下来自己实现一下. 首先数据库信息: 新建一个名为 l ...

  7. 904E

    $dp$ 凉凉.jpg 看到题就想决策单调性,想了一个多小时也没想出来,排名$200+$,$gg$ 事实上,我们只可能每$c$个或每一个分一段,假设我们分了一段长为$c$,如果添加一个新元素,如果新的 ...

  8. 再学IHanlder 类----------------关于Asp.net与iis原理网上看博客收获写一个验证码用一般处理程序记的好长时间前就写过不过现在再看有点不一样的感觉

    建一个web网站 新建一般处理程序直接贴代码: using System;using System.Collections.Generic;using System.Linq;using System ...

  9. 塞尔达:旷野之息个人对比上古卷轴V:天际

    上古卷轴5是我之前玩过最优秀的作品.玩塞尔达的时候就有跟上古卷轴5比对,真的都是神作.两个游戏的自由度都是真的高. 主线剧情上,老滚5印象不深了,当时就知道战斗,只记住了开头砍头现场,还有奥杜因这个龙 ...

  10. 动态调用dll遇到的问题

    问题:动态调用第三方提供的dll报错. Run-Time Check Failure #0 - The value of ESP was not properly saved across a fun ...