HPU 1192
来源:互联网 发布:模糊决策算法原理 编辑:程序博客网 时间:2024/06/05 18:48
Welcome To HPU Online Judge!
1192: Sequence [组合数学]
时间限制: 3 Sec 内存限制: 128 MB提交: 160 解决: 62
题目描述
在某个夜黑月高的晚上,!!!,原谅我编不下去了。
很美吧?放松之后,继续做题吧。
HS(Handsome)的Ocean在纸上写下
序列。
Ocean认为一个序列的价值的是:序列中不同元素个数。
现在他想知道
序列中所有子序列的价值之和。
比如序列
。
输入
第一行输入一个整数T
,代表有每组数据占两行,第一行输入一个整数
接下来一行输入
注:
输出
对每组测试数据,输出一个结果代表所有子序列价值之和。由于结果会很大,请用longlong
(%lld)。
样例输入
431 1 141 1 1 1410 10 10 8201 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
样例输出
715227864320
题意:》》》》思路:统计每一个数的出现次数,然后用其子集合数乘以选中的个数求和即可(总价值=价值*方案数);
下面附上代码:
/*样例解释 10 10 10 810的个数为3,则10所构成的集合数(或者可以理解为方案数)为2^3-1, 同理8的方案数为1,那么选数的话共有三种可能(10),(8),(10,8),其价值分别为10的方案数,8的方案数,10的方案数*8的方案数*2 求和即可*/ #include<bits/stdc++.h>using namespace std;typedef long long LL;LL a[15],sum[15];//a用来记录每个数出现的次数,sum记录每个数的方案数 int N,T,b;/*LL Quick_mod(LL a,LL b){//从别的博客上看的算法,可以优化时间和空间复杂度。 LL ans=1;while(b){if(b&1) ans*=a;b>>=1;a*=a;}return ans;}*/LL solve(){LL ans=0;for(LL i=1;i<(1<<10);i++){LL ams=1;LL k=0;for(LL j=0;j<10;j++){//选数 if(i&(1<<j)){k++;//记录的选中的数的个数ams*=sum[j+1];//记录其每个数的方案数的和 }}ans+=ams*k;//总价值=每种可能的方案数*价值的和 }return ans;}int main(){scanf("%d",&T);while(T--){scanf("%d",&N);memset(a,0,sizeof(a));memset(sum,0,sizeof(sum));while(N--){scanf("%d",&b);a[b]++;}for(int i=1;i<=10;i++)sum[i]=pow(2,a[i])-1;//计算方案数 printf("%lld\n",solve());}return 0;}
阅读全文
0 0
- HPU 1192
- HPU
- [HPU
- [HPU
- 【HPU 1192】: Sequence 【 状态压缩】
- 【HPU 1192 Sequence】+ 状态压缩 +组合数学
- hpu 1192 Sequence (dp+组合数学)
- HPU 1192 Sequence(状态压缩+组合数学)
- HPU 1192:Sequence(组合数+二进制选数)
- hpu--1703
- hpu--1715
- hpu--1717
- hpu 1032
- hpu E
- HPU D
- HPU C
- HPU A
- HPU G
- Raptor之打印符号图形
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树(未敲)
- Spring Boot的web开发(4)
- C#开发环境配置-VS2017安装使用
- 方法重载
- HPU 1192
- Core Data
- NOIP2015提高D1T2 信息传递
- Qt--字符串类
- [LeetCode] DP 之 Maximum sum of 3 Non-Overlapping Subarrays
- 空间中的向量
- 算法提高 拿糖果 DP
- JFinal 中的Controller(1)
- 人工智能,机器学习和深度学习的概念区分