没样例下载次数了,不知道辍哪了,help!
查看原帖
没样例下载次数了,不知道辍哪了,help!
591952
xiaozhao_楼主2024/7/17 11:06
#include<bits/stdc++.h>
using namespace std;
int T,n,ans,a[18],t[18];
inline void dfs(int cnt){
	if(cnt>=ans) return;
	for(int k=1;k<=3;k++){
		for(int i=3;i<=13;i++){
			if(a[i]<k) continue;
			int t=i;
			while(t<=13&&a[t+1]>=k) t++;
			if((t-i+1)*k>=5){
				for(int j=i;j<=t;j++) a[j]-=k;
				dfs(cnt+1);
				for(int j=i;j<=t;j++) a[j]+=k;
			}
		}
	}
	memset(t,0,sizeof t);
	for(int i=1;i<=4;i++)
		for(int j=2;j<=15;j++)
			if(a[j]==i) t[i]++;
	int d4=min(t[4],t[2]/2+t[1]/2),d3=min(t[3],t[2]+t[1]-2*d4);
	cnt+=t[4];
	cnt+=t[3];
	cnt+=t[2]+t[1]-2*d4-d3;
	ans=min(ans,cnt);
}
int main(){
	cin>>T>>n;
	while(T--){
		memset(a,0,sizeof a);
		ans=54;
		for(int i=1,x,y;i<=n;i++)
			scanf("%d%d",&x,&y),a[x]++;
		a[14]=a[1],a[15]=a[0];
		dfs(0);
		printf("%d\n",ans);
	}
	return 0;
}
2024/7/17 11:06
加载中...