#include<bitsdc++.h>
using namespace std;
int h[20],p[20];
/*
1 2 3 4 5 6
2 3 2 2 1 4
*/
int threee(){
int summ=0,cnt=0;
for(int i=3;i<=15;i++){
if(h[i]>=3){
summ++;
}else{
if(summ>=2){
for(int k=(i-summ);k<i;k++){
h[k]-=3;
}
cnt++;
}
summ=0;
}
}
return cnt;
}
int twoo(){
int summ=0,cnt=0;
for(int i=3;i<=15;i++){
if(h[i]>=2){
summ++;
}else{
if(summ>=3){
for(int k=(i-summ);k<i;k++){
h[k]-=2;
}
cnt++;
}
summ=0;
}
}
return cnt;
}
int onee(){
int summ=0,cnt=0;
for(int i=3;i<=15;i++){
if(h[i]>=1){
summ++;
}else{
if(summ>=5){
for(int k=(i-summ);k<i;k++){
h[k]--;
}
cnt++;
}
summ=0;
}
}
return cnt;
}
int fourtwo(){
int cnt=0,cntt=0;
for(int i=1;i<=15;i++){
if(h[i]==4){
cntt=0;
for(int j=0;j<=15;j++){
if(cntt==2)break;
if(h[j]==1&&cntt<2){
cntt++;
h[j]--;
}
}
for(int j=0;j<=15;j++){
if(cntt==2)break;
if(h[j]==2&&cntt<2){
cntt++;
h[j]--;
}
}
for(int j=0;j<=15;j++){
if(cntt==2)break;
if(h[j]==3&&cntt<2){
cntt++;
h[j]--;
}
}
if(cntt==2){
cnt++;
h[i]-=4;
}
}
}
return cnt;
}
int threetwo(){
int cnt=0,cntt=0;
for(int i=1;i<=15;i++){
if(h[i]==3){
cntt=0;
for(int j=0;j<=15;j++){
if(h[j]==1&&cntt<2){
cntt++;
h[j]--;
}
}
for(int j=0;j<=15;j++){
if(cntt==2)break;
if(h[j]==2&&cntt<2){
cntt++;
h[j]--;
}
}
for(int j=0;j<=15;j++){
if(cntt==2)break;
if(h[j]==3&&cntt<2){
cntt++;
h[j]--;
}
}
if(cntt==2){
cnt++;
h[i]-=3;
}
}
}
return cnt;
}
int threeone(){
int cnt=0,cntt=0;
for(int i=1;i<=15;i++){
if(h[i]==3){
cntt=0;
for(int j=0;j<=15;j++){
if(h[j]==1&&cntt<1){
cntt++;
h[j]--;
cnt++;
break;
}
}
for(int j=0;j<=15;j++){
if(cntt==1)break;
if(h[j]==2&&cntt<1){
cntt++;
h[j]--;
cnt++;
}
}
for(int j=0;j<=15;j++){
if(cntt==1)break;
if(h[j]==3&&cntt<1){
cntt++;
h[j]--;
cnt++;
}
}
if(cntt==1){
h[i]-=3;
}
}
}
return cnt;
}
/*
0 1 2 3 4 5 6 7 8 9 10 11 12 13
1 0 0 0 0 0 0 0 2 1 0
2
*/
int v[7]={1};
int dfs(int k){
int cnt=0,mm=1;
for(int i=1;i<=6;i++){
if(v[i]==0)mm=0;
}
if(mm==1){
// for(int i=0;i<15;i++){
// cout<<h[i]<<' ';
// }
// cout<<endl;
return cnt;
}
if(k==1){
cnt+=threee();
}else if(k==2){
cnt+=twoo();
}else if(k==3){
cnt+=onee();
}else if(k==4){
cnt+=fourtwo();
}else if(k==5){
cnt+=threetwo();
}else if(k==6){
cnt+=threeone();
}
for(int i=1;i<=6;i++){
if(v[i]==0){
v[i]=1;
cnt+=dfs(i);
v[i]=0;
}
// cout<<i<<endl;
}
// cout<<endl;
return cnt;
}
int t,n;
int main(){
cin>>t>>n;
for(int i=0;i<t;i++){
for(int j=0;j<=15;j++){
p[j]=0;h[j]=0;
}
for(int j=0;j<n;j++){
int a,b;
cin>>a>>b;
if(a==1||a==2){
p[a+13]++;
}else{
p[a]++;
}
}
// for(int i=0;i<15;i++){
// cout<<h[i]<<' ';
// }
// cout<<endl;
int minn=114514,summ;
for(int i=1;i<=6;i++){
for(int j=0;j<=15;j++){
h[j]=p[j];
}
v[i]=1;
summ+=dfs(i);
v[i]=0;
for(int j=0;j<=15;j++){
if(h[j]!=0){
summ++;
}
}
minn=min(minn,summ);
}
// for(int i2=0;i2<-1;i2++){
// cout<<"in"<<endl;
// }
// cout<<endl;
if(i==0)cout<<minn;
else cout<<endl<<minn;
}
return 0;
}
1 17
12 3
4 3
2 3
5 4
10 2
3 3
12 2
0 1
1 3
10 1
6 2
12 1
11 3
5 2
12 4
2 2
7 2
输出7
答案6
但如果取消以下代码的注释:
for(int i2=0;i2<-1;i2++){
cout<<"in"<<endl;
}
输出就变成了6
这是个什么原理啊?