首先题目规则就是斗地主的规则,只有大王和小王的规则与平时的斗地主有一点出入。就是暴搜,既然是暴搜代码就肯定是又臭又长。(de)了三个小时的(bug)发现一个>
写成了<
,哭了啊。呜呜呜呜~~~。
#include<bits/stdc++.h>
using namespace std;
#define scy(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int t,n,ans,sum[25];
void dfs (int x){
if(x>=ans) return;
//顺子
int k=0;//顺子
for(int i=3;i<=14;i++){
if(sum[i]==0) k=0;
else{
k++;
if(k>=5){
for(int j=i;j>=i-k+1;j--) sum[j]--;
dfs(x+1);
for(int j=i;j>=i-k+1;j--) sum[j]++;
}
}
}
k=0;//连对
for(int i=3;i<=14;i++){
if(sum[i]<=1) k=0;
else{
k++;
if(k>=3){
for(int j=i;j>=i-k+1;j--) sum[j]-=2;
dfs(x+1);
for(int j=i;j>=i-k+1;j--) sum[j]+=2;
}
}
}
k=0;//类似飞机
for(int i=3;i<=14;i++){
if(sum[i]<=2) k=0;
else{
k++;
if(k>=2){//飞机可以带牌
for(int j=i;j>=i-k+1;j--) sum[j]-=3;
dfs(x+1);
for(int j=i;j>=i-k+1;j--) sum[j]+=3;
}
}
}
for(int i=2;i<=14;i++){//枚举有三张或四张的
if(sum[i]<=3){
if(sum[i]<=2) continue;
sum[i]-=3;
for(int j=2;j<=15;j++){
if(sum[j]<=0||j==i) continue;
sum[j]--;
dfs(x+1);
sum[j]++;
}
for(int j=2;j<=14;j++){
if(sum[j]<=1||j==i) continue;
sum[j]-=2;
dfs(x+1);
sum[j]+=2;
}
sum[i]+=3;
}
else{
sum[i]-=3;
for(int j=2;j<=15;j++){
if(sum[j]<=0||j==i) continue;
sum[j]--;
dfs(x+1);
sum[j]++;
}
for(int j=2;j<=14;j++){
if(sum[j]<=1||j==i) continue;
sum[j]-=2;
dfs(x+1);
sum[j]+=2;
}
sum[i]+=3;
sum[i]-=4;
for(int j=2;j<=15;j++){
if(sum[j]<=0||j==i) continue;
sum[j]--;
for(int k=2;k<=15;k++){
if(sum[k]<=0||j==k) continue;
sum[k]--;
dfs(x+1);
sum[k]++;
}
sum[j]++;
}
for(int j=2;j<=14;j++){
if(sum[j]<=1||j==i) continue;
sum[j]-=2;
for(int k=2;k<=14;k++){
if(sum[k]<=1||j==k) continue;
sum[k]-=2;
dfs(x+1);
sum[k]+=2;
}
sum[j]+=2;
}
sum[i]+=4;
}
}
for(int i=2;i<=15;i++) if(sum[i]) x++;
ans=min(ans,x);
}
int main(){
//scy("in");
t=read(),n=read();
while(t--){
ans=0x7fffffff;
int x,y;
memset(sum,0,sizeof sum);
for(int i=1;i<=n;i++){
x=read(),y=read();
if(x==0) sum[15]++;
else if(x==1) sum[14]++;
else sum[x]++;
}
dfs(0);
printf("%d
",ans);
}
}