tle 90分,#2 码风优良求助
查看原帖
tle 90分,#2 码风优良求助
1104479
zombiell810975楼主2024/4/16 19:05

如题

#include<bits/stdc++.h>
using namespace std;
int v,v0[30],g,g0[20][30],c[20],ans=1e9,r[30],ans0[30];
bool c0[20];
void dfs(int x){
	if(x-1>g)	return ;
	if(x-1>ans) return ;
	int sum=0;
	for(int i=1;i<=v;i++){
		if(v0[i]<=c[i])	sum++;
		else break;
	}
	if(sum==v){
		ans=min(ans,x-1);
		if(ans==x-1){
			for(int i=1;i<=x;i++){
				ans0[i]=r[i];
			}	
		}
		return ;
	}
	for(int i=g-x+1;i>=1;i--){
		if(!c0[i]){
			r[x]=i;
			c0[i]=1;
			for(int j=1;j<=v;j++) c[j]+=g0[i][j];
			dfs(x+1);
			for(int j=1;j<=v;j++) c[j]-=g0[i][j];
			c0[i]=0;
		}
	}
}
int main(){
	cin>>v;
	for(int i=1;i<=v;i++) cin>>v0[i];
	cin>>g;
	for(int i=1;i<=g;i++){
		for(int j=1;j<=v;j++) cin>>g0[i][j];
	}
	dfs(1);
	cout<<ans<<' ';
	sort(ans0+1,ans0+1+ans);
	for(int i=1;i<=ans;i++) cout<<ans0[i]<<' ';
	return 0;
}
2024/4/16 19:05
加载中...