TLE求助
查看原帖
TLE求助
1073741
UKE_bound楼主2024/1/3 11:49

7070分求助

#include<bits/stdc++.h>
using namespace std;
int v,g,al[30],vtl[30],sl[30][20],u,an=1e8;
bool b[30],k[30];
inline bool pd(void){
	for(int i=1;i<=v;i++){
		if(al[i]<vtl[i]){
			return 0;
		}
	}
	return 1;
}
inline void add(int a){
	for(int i=1;i<=v;i++){
		al[i]+=sl[a][i];
	}
}
inline void cut(int a){
	for(int i=1;i<=v;i++){
		al[i]-=sl[a][i];
	}
}
void dfs(void){
	if(pd()){
		if(u<an){
			an=u;
			for(int i=1;i<=g;i++){
				k[i]=b[i];
			}
		}
	}
	for(int i=1;i<=g;i++){
		if(b[i]){
			continue;
		}
		add(i);
		b[i]=1;
		u++;
		dfs();
		u--;
		b[i]=0;
		cut(i);
	}
}
int main(){
	cin>>v;
	for(int i=1;i<=v;i++){
		cin>>vtl[i];
	}
	cin>>g;
	for(int i=1;i<=g;i++){
		for(int j=1;j<=v;j++){
			cin>>sl[i][j];
		}
	}
	dfs();
	cout<<an<<" ";
	for(int i=1;i<=g;i++){
		if(k[i]){
			cout<<i<<" ";
		}
	}
	return 0;
}

请快快回复

2024/1/3 11:49
加载中...