Card Hand Sorting 二进制枚举暴力
这个题其实由于只有4种花色的,那么每种花色排列的顺序,也不过是4!种,然后对于每种花色内部到底是升序还是降序,其实也可以直接暴力,一共也就4!*2^4种情况,然后直接进行排序就可以了,但是我们如何计算需要移动的位置呢???我们这样考虑,我们由于要保证内部有序,那么最后一定是一个升序或者降序,那么插入一张牌,实际上是相当改变内部相对位置,那么考虑无序的,我们肯定是找到最长的递增子序列,那么他们一定是不用互相移动的,而其他的肯定是要移动的,因为他们不满足前后的顺序,并且他们是肯定是要移动的,直接二进制枚举即可。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{
int id;
int val;
int col;
int flag;
}a[];
int dp[];
int col[]={,,,};
char s[];
int n;
bool cmp(node x,node y){
if (x.col==y.col){
return x.flag<y.flag;
}
return col[x.col]<col[y.col];
}
int LCS(){
memset(dp,,sizeof(dp));
int ans=;
for (int i=;i<=n;i++){
dp[i]=;
for (int j=;j<i;j++){
if (a[i].id>a[j].id){
dp[i]=max(dp[i],dp[j]+);
}
}
ans=max(ans,dp[i]);
}
return ans;
}
int main(){
while(~scanf("%d",&n)){
int ans=0x3f3f3f3f;
for (int i=;i<=n;i++){
scanf("%s",s);
if (s[]=='T')
a[i].val=;
else if (s[]=='J')
a[i].val=;
else if (s[]=='Q')
a[i].val=;
else if (s[]=='K')
a[i].val=;
else if (s[]=='A')
a[i].val=;
else
a[i].val=s[]-'';
if (s[]=='s')a[i].col=;
else if (s[]=='h')a[i].col=;
else if (s[]=='d')a[i].col=;
else a[i].col=;
a[i].id=i;
}
//cout<<"sssssss";
do{
for (int i=;i<;i++){
for (int j=;j<=n;j++){
a[j].flag=a[j].val*(((i>>col[a[j].col])&)?:-);
}
sort(a+,a++n,cmp);
int minn=n-LCS();
ans=min(ans,minn);
} }while(next_permutation(col,col+));
printf("%d\n",ans);
}
return ;
}
Card Hand Sorting 二进制枚举暴力的更多相关文章
- Tomb Raider HihoCoder - 1829 (二进制枚举+暴力)(The 2018 ACM-ICPC Asia Beijing First Round Online Contest)
Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...
- 【二进制枚举+LCS】Card Hand Sorting
[二进制枚举+LCS]Card Hand Sorting 题目描述 When dealt cards in the card game Plump it is a good idea to start ...
- Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维
题意1: 给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母.如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A 最后你需要要出来所有的字符对,s[i]和s[i-1 ...
- Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (暴力二进制枚举)
题意:给你一个只含\(+\)和\(-\)的字符串,统计它的加减和,然后再给你一个包含\(+,-,?\)的字符串,其中\(?\)可以表示为\(+\)或\(-\),问有多少种情况使得第二个字符串的加减和等 ...
- UVA12113-Overlapping Squares(二进制枚举)
Problem UVA12113-Overlapping Squares Accept:116 Submit:596 Time Limit: 3000 mSec Problem Descripti ...
- Gym - 100712G Heavy Coins(二进制枚举)
https://vjudge.net/problem/Gym-100712G 题意:给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】
任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...
- Atcoder beginner contest 249 C-Just K(二进制枚举)
题目大意:给你N个字符串,你可以从中选择任意数量的字符串,请统计在你的字串中,相同字母出现次数正好为K次的字母数.数据保证出现的字母都是小写字母. 1≤N≤15 1 ≤K≤N 一开始读题的时候读错了, ...
- UVA 1151二进制枚举子集 + 最小生成树
题意:平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此, 你可以新建一些边,费用等于两个端点的欧几里得距离的平方.另外还有q(0<=q<=8)个套餐(数 ...
随机推荐
- 7 个令人兴奋的 JavaScript 新特性
前言 一个ECMAScript标准的制作过程,包含了Stage 0到Stage 4五个阶段,每个阶段提交至下一阶段都需要TC39审批通过.本文介绍这些新特性处于Stage 3或者Stage 4阶段,这 ...
- 转:解决Onethink上传视频的问题 超棒的解决方案
用过Onethink的都知道,它是不能上传视频的. 有人想到用上传附件的方式上传视频,但是结果……就是提示没有上传文件. 要是正常上传个一两兆的图片啊,压缩文件什么的还是可以的. 所以,重点来了 怎么 ...
- AspNet 常有功能函数1.0
1.net 获取客户端ip方法(此方法不是很准确) public static string GetIP() { string str; if (!string.IsNullOrEmpty(HttpC ...
- 层次分析法MATLAB
输入成对比较矩阵,输出权重值和一致性检验结果. disp('请输入判断矩阵A(n阶)'); A=input('A='); [n,n]=size(A); x=ones(n,100); y=ones(n, ...
- idea启动报错:Access denied for user 'root '@'192.168.100.XXX' (using password: YES)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean wit ...
- 用Direct2D和DWM来做简单的动画效果
原文:用Direct2D和DWM来做简单的动画效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detail ...
- js正则表达式常见规则整理
验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9 ...
- c标签 if else c标签 总结
[b]STL标签用法 关键字:JSTL标签.<c:choose>.<c:forEach>.<c:forTokens>.<c:if>.<c:impo ...
- 洛谷3861八月月赛A题解
链接 用f[i][j]表示乘积为i的,包含的最大数小于等于j时的方案总数 我们先考虑所用的数为1到n的情况 最后的答案就是f[n][n]-1 转移时考虑f[i][j]可以转移到的状态 显然f[i][j ...
- 写一个杀死Gradle Daemon的shell脚本和bat脚本
1. Gradle Daemon也就是Gradle守护进程 Gradle需要运行在一个Java虚拟机中,每一次执行gradle命令就意味着一个新的Java虚拟机被启动,然后加载Gradle类和库,最后 ...