• 个人简介

    十年OI一场空 不开long long见祖宗

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,a[30],b[30][30],t[30],len=1,sum[30],cnt;
    bool vis[1000005];
    vector <int> v;
    bool cmp(vector <int> a,vector <int> b){
    	return a.size()<b.size() || a.size()==b.size()&&a<b;
    }
    void dfs(int x,int step){
    	t[step]=x; 
    	vis[x]=1; 
    	bool flag=0;
    	for(int i=1;i<=n;i++){
    		if(sum[i]<a[i]){
    			flag=1;
    		}
    	}
    	if(flag==0){
    		cnt++;
    		vector <int> tmp(t+1,t+step+1); 
    		if(cnt==1||(tmp.size()<v.size()||tmp.size()==v.size()&&tmp<v)){
    			v=tmp;
    		} 
    	}
    	for(int i=x+1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			sum[j]+=b[i][j];
    		}
    		dfs(i,step+1);
    		vis[i]=0;
    		for(int j=1;j<=n;j++){
    			sum[j]-=b[i][j];
    		} 
    	}
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	} 
    	cin>>m;
    	for(int i=1;i<=m;i++){
    		for(int j=1;j<=n;j++){
    			cin>>b[i][j];
    		}
    	} 
    	dfs(0,0);
    	cout<<v.size()<<" ";
    	for(auto i:v){
    		cout<<i<<" ";
    	} 
    	return 0;
    }
    
    

    binary_search //这玩意儿怎么自己写

    对了,Alt+f4加好友

  • 最近活动

  • Stat

  • Rating