转载自:http://blog.csdn.net/u013611908/article/details/44545955

题目大意:一副牌除掉大小王,然后有一些已经形成了序列,让你算剩下的牌能组合出多少种比给的序列小的组合。

思路:搜索,分这个位置相同或者小于,假如放一个小于的,则剩下的就是全排列

只不过这边的全排列是相同元素的全排列。

所采取的是位置的选择的排列方式。

比如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 1000000007
int 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]--;
}
else
if (str[i] == '1')
{
str[j++] = 10 + 48;
a[10]--;
}
else
if (str[i] == 'J')
{
str[j++] = 11 + 48;
a[11]--;
}
else
if (str[i] == 'Q')
{
str[j++] = 12 + 48;
a[12]--;
}
else
if (str[i] == 'K')
{
str[j++] = 13 + 48;
a[13]--;
}
else
if (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;
}

【搜索】【组合数学】zoj3841 Card的更多相关文章

  1. xdoj-1117(记忆化搜索+组合数学)

    因为我是从上到下,所以就不叫动态规划而叫记忆化搜索吧 (不过运行时间只有3ms....应该是很不错的吧) 排版怎么那么难看...编辑的时候不是这样子的啊?! 思想 : 大眼一看应该是一道很裸的状压dp ...

  2. Codeforces Gym 100431B Binary Search 搜索+组合数学+高精度

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...

  3. 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】

    Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...

  4. 2018.09.19 atcoder Card Game for Three(组合数学)

    传送门 简单组合数学想优化想了半天啊233. 我们只需考虑翻开n张A,b张B,c张C且最后一张为A的选法数. 显然还剩下m+k−b−cm+k-b-cm+k−b−c张牌没有选. 这样的话无论前n+b+c ...

  5. AT2070 Card Game for Three(组合数学)

    传送门 解题思路 前面的思路还是很好想的,就是要枚举最后一个\(a\)在哪出现算贡献,之后我先想的容斥,结果彻底偏了..后来调了很久发现自己傻逼了,似乎不能容斥,终于走上正轨23333.首先可以写出一 ...

  6. Atcoder Regular Contest 061 D - Card Game for Three(组合数学)

    洛谷题面传送门 & Atcoder 题面传送门 首先考虑合法的排列长什么样,我们考虑将每次操作者的编号记录下来形成一个序列(第一次 A 操作不计入序列),那么显然这个序列中必须恰好含有 \(n ...

  7. 算法讲堂二:组合数学 & 概率期望DP

    组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...

  8. 组合数学or not ---- n选k有重

    模板问题: 1. 取物品 (comb.pas/c/cpp) [问题描述] 现在有n个物品(有可能相同),请您编程计算从中取k个有多少种不同的取法.[输入] 输入文件有两行,第一行包含两个整数n,k(2 ...

  9. I.MX6 uSDHC SD card register

    /**************************************************************************** * I.MX6 uSDHC SD card ...

随机推荐

  1. 树形dp(B - Computer HDU - 2196 )

    题目链接:https://cn.vjudge.net/contest/277955#problem/B 题目大意:首先输入n代表有n个电脑,然后再输入n-1行,每一行输入两个数,t1,t2.代表第(i ...

  2. 关于maven环境下使用pom.xml引入包名.lastUpdate包的解决办法

    今天在导入POI-OOXML的时候总是缺失xmlbeans包,而且刷新pom文件总是生成一个lastupdate文件,大小为1KB,终于找到解决办法. 1.首先删除想要的jar包所在文件夹内的所有 . ...

  3. Sicily 1211. 商人的宣传

    题目链接:http://soj.me/1211 Description Bruce是K国的商人,他在A州成立了自己的公司,这次他的公司生产出了一批性能很好的产品,准备宣传活动开始后的第L天到达B州进行 ...

  4. 85.YCbCr与YUV的区别

    yuv色彩模型来源于rgb模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域. YCbCr模型来源于yuv模型,应用于数字视频,ITU-R BT.601 recommendation 通过 ...

  5. Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法

    MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...

  6. Small Private Cloud Deployment Solution

    项目背景 为用户提供可访问的桌面虚拟机,方便软件研发人员日常办公,软件开发,编译等工作.主要操作包括Visor制图.程序开发测试以及使用office软件办公. 目前阶段需要支持100台虚拟机(4VCP ...

  7. pip离线安装

    pip freeze > requirements.txt pip download <packages> pip install --no-index --find-links=& ...

  8. image配准,发布geoserver服务

    1.arcmap配准:注:png只保留需要显示范围,多余部分删除,,配准后再进行栅格裁剪(为了去除偏移后出现的NoData值) 2.导出tif:注:NoData值设置,一般为256(有时候经过裁剪会默 ...

  9. 关于 poScreenCenter 与 poDesktopCenter

    主要是窗体水平方向与垂直方向的的 居中问题,由于水平方向 没有什么,所以不探讨.而垂直方向由于底部有个工具栏,工具栏自身有个高度,所以垂直方向的居中问题,需要探讨下. 结论: poScreenCent ...

  10. Linux学习笔记:cp和scp复制文件

    拷贝文件和文件夹,在Linux上通过cp命令来实现. cp:用户当前机器的文件复制 scp:通过ssh本机和其他机器的文件复制 secure copy cp a.txt b.txt scp a.txt ...