hpu_oj 1192: Sequence
来源:互联网 发布:心知api怎么呐数据 编辑:程序博客网 时间:2024/05/16 17:29
#include <bits/stdc++.h> //有些暴力,没想到10个数也有这么大的复杂度,要过3s#include <cstdio>using namespace std;typedef long long ll;int a[11],book[11],s;ll result,c[60][60];long long f(long long n,long long m){ long long ans=1; for(long long i=1;i<=m;i++) ans=ans*(n-m+i)/i; return ans;}void init(){ for(int i=1;i<=50;i++) for(int j=1;j<=i;j++) c[i][j]=f(i,j);}void dfs(int num,int k){ if(11-k<s-num) return;//优化下 if(num==s) { ll temp=1; for(int i=1;i<=10;i++) { if(book[i]&&a[i]>1) { ll temp1=0; for(int j=1;j<=a[i];j++){temp1+=c[a[i]][j];} temp=temp*temp1; } } result=result+s*temp; return; } for(int i=k;i<=10;i++) { if(a[i]) { book[i]=1; dfs(num+1,i+1);// i+1产生递增有序序列 book[i]=0; } } return;}int main(){ init(); int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); result=0; int n;scanf("%d",&n); for(int i=0;i<n;i++) { int x; scanf("%d",&x); a[x]++; } int num=0; for(int i=1;i<=10;i++) if(a[i]) num++; for(int i=1;i<=num;i++) //枚举价值 { s=i; dfs(0,1); } printf("%lld\n",result); } return 0;}
0 0
- hpu_oj 1192: Sequence
- hpuoj 1192 Sequence
- HPUOJ 1192 Sequence
- hpuoj 1192: Sequence
- sequence
- SEQUENCE
- Sequence
- sequence
- sequence
- Sequence
- sequence
- sequence
- sequence
- Sequence
- Sequence
- Sequence
- Sequence
- sequence
- 坚持#第112天~最快速度完成每一件事呀!
- 给予就是得到
- B站开源播放器编译库ijkplayer0.6.0
- 【敏捷开发】从"需求文档"出发聊敏捷
- NDK中开发中比较字符串是否相等,
- hpu_oj 1192: Sequence
- ubuntu 虚拟机网卡
- Java学习笔记--异常处理
- CODEFORCES 732F Tourist Reform
- Play Framework介绍:HTTP路由
- Oracle数据库查询语句练习
- 职业规划之大局观
- MySQL主从复制服务器(replication)创建笔记
- SonarQube安装、配置、管理、拓展和使用