C++11 90分,sum可能出问题
查看原帖
C++11 90分,sum可能出问题
727556
wangziwenhk楼主2023/11/15 15:34
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
int min_v[MAXN];
int nums[MAXN][MAXN];
int ans[MAXN];
int stacks[MAXN];
int n,m,min_size=110;
bool judge(int p){
    int sum[MAXN]={0};
    memset(sum,0,sizeof sum);
    for(int i=0;i<p;i++){
        for(int j=1;j<=n;j++){
            sum[j]+=nums[stacks[i]][j];
        }
    }
    for(int i=1;i<=n;i++){
        if(sum[i]<min_v[i]){
            return false;
        }
    }
    return true;
}
void dfs(int x,int p){
    if(p>=min_size)return;
    if(x>n){
        if(judge(p)){
            for(int i=0;i<p;i++){
                ans[i]=stacks[i];
            }
            min_size=p;
        }
        return;
    }
    stacks[p]=x;
    dfs(x+1,p+1);
    stacks[p]=0;
    dfs(x+1,p);
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&min_v[i]);
    }
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            scanf("%d",&nums[i][j]);
        }
    }
    dfs(1,0);
    printf("%d ",min_size);
    for(int i=0;i<min_size;i++){
        printf("%d ",ans[i]);
    }
    return 0;
}
2023/11/15 15:34
加载中...