uva 11076 - Add Again(组合数学)
来源:互联网 发布:java web工程反编译 编辑:程序博客网 时间:2024/05/18 02:57
题目链接:uva 11076 - Add Again
解题思路:给出一个序列,要求将所有可能的序列每个序列形成的数值相加的和。
解题思路:对每个位置进行考虑,计算每种数字在这个位置出现的次数,其他位置按照组合数学去计算次数。然后有n个位置,每个位置的情况是一样的。
#include <stdio.h>#include <string.h>const int N = 105;typedef unsigned long long ll;int n;ll C[N][N], cnt[N];void init () {C[0][0] = 1;for (int i = 1; i <= 12; i++) {for (int j = 0; j <= i; j++)C[i][j] = C[i-1][j] + C[i-1][j-1];}}ll count () {int k = n - 1;ll t = 1;for (int i = 0; i < 10; i++) {t *= C[k][cnt[i]];k -= cnt[i];}return t;}ll solve () {ll tmp = 0;for (ll i = 0; i < 10; i++) {if (cnt[i]) {cnt[i]--;ll t = count();cnt[i]++;tmp += i * t;}}ll ans = 0;for (int i = 0; i < n; i++)ans = ans * 10 + tmp;return ans;}int main () {init ();while (scanf("%d", &n), n) {memset(cnt, 0, sizeof(cnt));int a;for (int i = 0; i < n; i++) {scanf("%d", &a);cnt[a]++;}printf("%lld\n", solve ());}return 0;}
2 0
- uva 11076 - Add Again(组合数学)
- UVa 11076 Add Again (组合数学)
- Uva 11076 Add Again 解题报告(组合数学)
- UVA 11076 - Add Again(数论+组合数学)
- UVa 11076 - Add Again (排列之和 组合数学)
- UVa 11076 Add Again(数学)
- Add Again(UVA 11076)
- UVA 11076 - Add Again
- UVA 11076 Add Again
- UVa:11076 Add Again
- UVA 11076 Add Again
- uva 11076 Add Again
- UVA 11076 Add Again
- UVA 11076-Add Again
- uva 11076Add Again
- UVA 11076 Add Again(重复元素排列)
- UVa-11076 Add Again(平均数思想)
- Add Again UVA
- 第16期中国智能家居主题沙龙将于4月22日在京举行
- Andorid SystemUI, StatusBar, Keyguard
- 约瑟夫环的java实现
- 常见Java面试题
- 一个女大学生的代码学习之路(一)
- uva 11076 - Add Again(组合数学)
- LogBack sl4j 通过MDC实现日志记录区分用户Session[以Spring mvc为例] - 独木桥
- 多名大臣曾因丑闻下台
- curl命令解析
- 一个女大学生的代码学习之路(一)
- Android中自定义View的MeasureSpec介绍及使用详解
- 最大和
- 台湾9名警员轻罚超载货车被依贪污罪起诉
- Alphabetical Substrings