【ZOJ】3841 Card (搜索+组合数学(重复元素的全排列)
来源:互联网 发布:怎样发淘宝链接给好友 编辑:程序博客网 时间:2024/06/05 12:07
题目大意:一副牌除掉大小王,然后有一些已经形成了序列,让你算剩下的牌能组合出多少种比给的序列小的组合。
思路:搜索,分这个位置相同或者小于,假如放一个小于的,则剩下的就是全排列
只不过这边的全排列是相同元素的全排列。
所采取的是位置的选择的排列方式。
比如1112233这个所有的情况就是c(7,3)*c(4,2)*c(2,2)
题目wa了很多发。
题目需要注意,是严格小于,等于是不行的。
另外就是涉及到剩的张数比给的少的情况。
这边直接给数据让大家测试吧,ps:是抄别人的。
Input:KKKKQQQQJJJJ10101010999988887777666655554444
K
AA22334455667788991010JJKKK
KAA22334455667788991010JJQK
KKKKJJJJQQQQ1010101099998888777766665555444433332222AAAA
AA22334455667788991010JJKKQQ
KKKJJJJQQQQ1010101099998888777766665555444433332222AAAA
Output:
34650
944696453
5
596617684
0
5
1
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define mod 1000000007int a[15];char str[60];long long ans = 0;long long c[60][60];void init(){for (int i = 0; i < 60;i++)c[i][0] = c[i][i] = 1;for (int i = 2; i < 60;i++)for (int j = 1; j < i; j++)c[i][j] = (c[i - 1][j] + c[i - 1][j - 1])%mod;}long long gao(int sum){long long ans = 1;for (int i = 1; i < 14; i++){ans = (ans*c[sum][a[i]])%mod;sum -= a[i];}return ans;}void dfs(int cur, int sum){if (!str[cur]){return;}if (sum == 0){ans++;return;}int k = str[cur] - 48;for (int i = 1; i<k; i++){if (a[i]>0){a[i]--;ans = (ans + (gao(sum-1)) % mod) % mod;a[i]++;}}if (a[k]>0){a[k]--;dfs(cur + 1, sum - 1);}}int main(){init();while (~scanf("%s", str)){int len = strlen(str);int j = 0;for (int i = 1; i < 14; i++)a[i] = 4;for (int i = 0; i < len; i++){if (str[i] == 'A'){str[j++] = 1 + 48;a[1]--;}elseif (str[i] == '1'){str[j++] = 10 + 48;a[10]--;}elseif (str[i] == 'J'){str[j++] = 11 + 48;a[11]--;}elseif (str[i] == 'Q'){str[j++] = 12 + 48;a[12]--;}elseif (str[i] == 'K'){str[j++] = 13 + 48;a[13]--;}elseif (str[i] == '0')continue;else{str[j++] = str[i];a[str[i] - 48]--;}}str[j] = 0;int sum = 0;for (int i = 1; i < 14; i++)sum += a[i];ans = 0;if (sum != 0)dfs(0, sum);printf("%lld\n", ans);}return 0;}
0 0
- 【ZOJ】3841 Card (搜索+组合数学(重复元素的全排列)
- 组合数学-两类元素的全排列
- 重复元素全排列
- 全排列的java实现(无重复元素)
- 求输入字符串的全排列 (无重复元素)
- 有重复元素的全排列
- 含重复元素的全排列
- 有重复元素的全排列
- 含重复元素序列的全排列
- 有重复元素的全排列问题
- 含有重复元素的全排列
- 有重复元素的全排列问题
- 含重复元素的全排列
- 有重复元素的全排列问题
- 有重复元素的全排列
- 包含重复元素的全排列
- 有重复元素的全排列问题
- 带重复元素的全排列
- 使用LFM(Latent factor model)隐语义模型进行Top-N推荐
- C/C++位域知识小结
- start_kernel到init进程启动的过程
- 通过fastjson实现各种数据格式与json格式之间的数据转换
- 求一定范围内素数的个数
- 【ZOJ】3841 Card (搜索+组合数学(重复元素的全排列)
- shell script循环语法与个别注意事项
- 原来就是没有标题
- C# 移除所有的事件绑定
- android4.4修改出厂默认输入法
- 总结集线器、网桥、交换机、路由器区别和一些ip地址知识
- iPhone4s提示:iPhone尚未激活
- Python中list的复制
- 如何使用 proguard.jar代码混淆,防止apk被反编译