hautoj 1264 某科学的打麻将 【暴力匹配】
来源:互联网 发布:vivo软件 编辑:程序博客网 时间:2024/04/28 02:42
点击打开链接
1264: 某科学的打麻将
时间限制: 1 秒 内存限制: 64 MB提交: 69 解决: 9
提交 状态
题目描述
过年打麻将果然是一项必备技能(雾),打麻将的起手式是整理好自己手中的牌,现在你有十三张牌(只可能出现一万到九万,一筒到九筒,一条到九条),你要把这些牌整理好,使得相同花色的牌必须在连续的唯一一段(即所有的"万"要放在一起,所有的"条"要放在一起,所有的"筒"要放在一起。),每段内牌是按照从小到大的顺序排列(“万”,“条”,“筒”的顺序没有要求)。你每次只能将当前牌中的任意一张牌放到最左边或者最右边。请问最少经过多少次可以使得牌被整理好。
一万到九万,用数字1-9表示
一筒到九筒,用小写字母a-i表示
一条到九条,用大写字母A-I 表示
输入
第一行 一个数字T代表数据组数(T<=10000)
接下来每行 13个字符 代表初始的牌
输出
T行每行一个数字,代表答案
样例输入
13abcABBDEFG11
样例输出
1
这题,第一次看没思路, 最后看了网上的思路,
因为只有三种牌, 那么结果只会有6钟。
那么把六种结果全部枚举出来。
然后用每种结果子序列匹配,能匹配的就是不用移动的。
其实我还有个想法,直接可以把每种结果的字符映射成升序,然后着最长上升子序列 就是不用动的。
#include<iostream>#include<cstdio>#include<map>#include<cstring>#include<vector>#include<algorithm>#define x first#define y second#define ll long longusing namespace std;const int mod=1e9+7;const int maxn=110050;int len;char s[20];char a[20],b[20],c[20];char t[20];int dp[20][20];int judge(){ int ret=0; for(int i=1;i<=len;++i){ for(int j=1;j<=len;++j){ if(t[j]==s[i])dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=dp[i-1][j]; ret=max(ret,dp[i][j]); } } return len-ret;}int main(){ int T; int ans; scanf("%d",&T); while(T--){ ans=20; int la=0,lb=0,lc=0; scanf("%s",s+1); len=strlen(s+1); for(int i=1;i<=len;++i){ if(isdigit(s[i])){ a[++la]=s[i]; }else if(islower(s[i])){ b[++lb]=s[i]; }else{ c[++lc]=s[i]; } } sort(a+1,a+la+1);a[la+1]='\0'; sort(b+1,b+lb+1);b[lb+1]='\0'; sort(c+1,c+lc+1);c[lc+1]='\0'; memset(t,'\0',sizeof(t)); strcat(t+1,a+1);strcat(t+1,b+1);strcat(t+1,c+1); ans=min(ans,judge()); memset(t,'\0',sizeof(t)); strcat(t+1,a+1);strcat(t+1,c+1);strcat(t+1,b+1); ans=min(ans,judge()); memset(t,'\0',sizeof(t)); strcat(t+1,b+1);strcat(t+1,a+1);strcat(t+1,c+1); ans=min(ans,judge()); memset(t,'\0',sizeof(t)); strcat(t+1,b+1);strcat(t+1,c+1);strcat(t+1,a+1); ans=min(ans,judge()); memset(t,'\0',sizeof(t)); strcat(t+1,c+1);strcat(t+1,a+1);strcat(t+1,b+1); ans=min(ans,judge()); memset(t,'\0',sizeof(t)); strcat(t+1,c+1);strcat(t+1,b+1);strcat(t+1,a+1); ans=min(ans,judge()); printf("%d\n",ans); } return 0;}
0 0
- hautoj 1264 某科学的打麻将 【暴力匹配】
- HAUToj 1264 某科学的打麻将
- HAUTOJ 1264 某科学家的打麻将 dp
- HAUT校赛--某科学的打麻将
- 河工大校赛E 某科学的打麻将
- 【hautoj 1269: 爱看电视的LsF】+ 暴力
- 求教打麻将的经验
- HAUTOJ 玲珑杯 1269: 爱看电视的LsF(暴力)
- 打麻将的战略战术各十八招
- 用打麻将的心态做事业
- 【BZOJ1028】【JSOI2007】麻将 暴力
- 打麻将吗?不是
- 《打麻将》教学设计
- 打麻将与人生哲学
- 打麻将后感悟
- 如何打麻将才能赢钱,怎么打麻将才能赢钱
- 打了一天麻将,呵呵
- XDU Problem 1105 - 打麻将
- WebSocket 编译指南
- hdu 2015 偶数求和
- Hibernate5 Unknown entity错误解决方法
- MD5加密-java代码
- Linux3
- hautoj 1264 某科学的打麻将 【暴力匹配】
- (转)美国的套利已经变成一门生意,而不是一门技术了
- Test类:解析Json
- Appium实际测试中处理界面元素的异常,心得分享
- 加密相关的技术
- jautodoc安装与使用
- js 判断滚动条是否到达底部
- 输入两个日期,使用Calendar来表示时间,并计算两个日期之间相隔的天数
- jquery操作checked属性以及disabled属性的多种方法