听取T声一片
查看原帖
听取T声一片
1226701
caixukun___123楼主2024/11/28 19:21
#include<bits/stdc++.h>
using namespace std;
const int N=26,M=16;
int v,g,a[N],b[M][N],c[N],ans=99999,l[M];
bool d[M];
bool pd(){
	for(int i=1;i<=v;i++){
		if(c[i]<a[i])
		    return false;
	}
	return true;
}
void dfs(int now){
	if(pd()){
		if(now-1<ans){
			ans=now-1;
			int k=1;
			for(int i=1;i<=g;i++)
			    if(d[i]==false)
			        l[k++]=i;
		}
		return ;
	}
	for(int i=1;i<=g;i++){
		if(d[i]){
		    for(int j=1;j<=v;j++) c[j]+=b[i][j];
		    d[i]=false;
		    dfs(now+1);
		    d[i]=true;
		    for(int j=1;j<=v;j++) c[j]-=b[i][j];
		}
	}
}
int main(){
	std::cin>>v;
	memset(d,1,sizeof(d));
	for(int i=1;i<=v;i++)
	    std::cin>>a[i];
	std::cin>>g;
	for(int i=1;i<=g;i++)
	    for(int j=1;j<=v;j++)
	        std::cin>>b[i][j];
	dfs(1);
	std::cout<<ans<<" ";
	for(int i=1;i<=ans;i++){
		std::cout<<l[i]<<" ";
	}
	return 0;
}
2024/11/28 19:21
加载中...