玄关 求调!
  • 板块灌水区
  • 楼主jdm__chico_guopo
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/25 23:01
  • 上次更新2024/11/26 13:52:18
查看原帖
玄关 求调!
797793
jdm__chico_guopo楼主2024/11/25 23:01

P1460

#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N=25;

int n,m;
int a[N];
int s[N][N],sum[N];
vector<int>ans,chosen;
bool pd(){

    memset(sum,0,sizeof sum);
    for(int i=0;i<n;i++){
        for(int j=0;j<chosen.size();j++){
            sum[i]+=s[chosen[j]][i];
        }
        if(sum[i]<a[i]){
            return false;
        }
    }
    if(ans.empty()||ans.size()>chosen.size()||(ans.size()==chosen.size()&&ans>chosen)){
        return true;
    }
    return false;
}


void dfs(int x){
    if(x>n){
        if(pd()){
            ans=chosen;
        }
        return;
    }
       
    
    chosen.push_back(x);
    dfs(x+1);
    chosen.pop_back();
    dfs(x+1);
}


signed main(){
    
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cin>>m;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            cin>>s[i][j];
        }
    }
    
    dfs(0);
    
    cout<<ans.size()<<" ";
    for(auto i:ans){
        cout<<i+1<<" ";
    }
    return 0;
}


2024/11/25 23:01
加载中...