#include<bits/stdc++.h>
using namespace std;
int a[107];
int b[10007][107];
int c[107][107];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
  scanf("%d",&a[i]);
}
b[0][0]=1;
for(int i=1;i<=n;i++){//遍历1到n
  for(int j=i;j>=1;j--){
    for(int k=10000;k>=a[i];k--){
      b[k][j]=b[k][j]+b[k-a[i]][j-1];//k为重量,j为重物的个数,k-a[i]遍历了所有情况
    }
  }
}
for(int i=0;i<=n;i++)
  c[i][0]=1,c[i][i]=1;//排列组合C
for(int i=1;i<=n;i++){
  for(int j=1;j<=i-1;j++){
    c[i][j]=c[i-1][j-1]+c[i-1][j];
  }
}
sort(a+1,a+1+n);
int ans=0;
int num=0;
for(int i=1;i<=n;i++){
  num++;
  int cnt=i;
  while(1){
    if(a[cnt+1]==a[i])
      cnt++;
    else
      break;
  }  
  for(int j=i;j<=cnt;j++){
    if(c[cnt-i+1][j-i+1]==b[(j-i+1)*a[i]][j-i+1])//b是所有重物组合起来的情况,j及重量和,c是相等重量重物组合起来的情  况,如果相等,则说明如此重量只能通过相等重物来组合,即惟一
    ans=max(ans,j-i+1);
  }
  i=cnt;
}
if(num==2)//特判补集情况
  printf("%d",n);
else
  printf("%d",ans);
return 0;
}

最新文章

  1. Visulalization Voronoi in OpenSceneGraph
  2. WPF ItemsControl ListBox ListView比较
  3. 除法 Division
  4. JDBC操作
  5. iOS - Project 项目
  6. EBS应用服务器启动指南
  7. Tomcat不能自动编译JSP文件问题的一种解决方法
  8. jtable更新数据
  9. Awesome Python
  10. 如何用Java进行3DES加密解
  11. [ZOJ 3631] Watashi&#39;s BG
  12. 九宫重拍(bfs + 康拓展开)
  13. Raknet实现的简单服务器与客户端的交互
  14. .Xmodmap vim键位映射。
  15. sheelエラー、オブジェクトを解析中にエラーが発生しました。
  16. java.util.concurrent.Executors类的常用方法介绍
  17. Java数据结构和算法 - TreeMap源码理解红黑树
  18. js实现表格无缝滚动效果
  19. ogg同步DDL时,源和目标端表空间名称不同的解决思路
  20. 微信小程序个人/企业开放服务类目一览表

热门文章

  1. 重置 oschina 的CSS
  2. vue2.0+wechat
  3. artdialog插件--iframe穿透特性
  4. mysql基本语句1
  5. java支付宝开发-00-资源帖
  6. hibernate的update、merge和saveOrUpdate的区别(转)
  7. Uva 10820 Send a Table(欧拉函数)
  8. python中的单引号,双引号和三双引号的区别
  9. stl_heap.h
  10. HDU3579Hello Kiki(中国剩余定理)(不互质的情况)