提交时间:2024-01-23 10:30:31

运行 ID: 123955

#include <bits/stdc++.h> #define int long long using namespace std; const int maxn = 30; int minn = 1e9; int ans[maxn]; int n,v[maxn],g,w[maxn][maxn]; int now[maxn],cpy[maxn]; bool check() { for (int i = 1; i <= n; i++) if (now[i] < v[i]) return 0; return 1; } void dfs(int res,int pos) { if (res >= minn) return; if (check()) { minn = res; memcpy(ans,cpy,sizeof ans); return; } for (int i = pos; i <= g; i++) { for (int j = 1; j <= n; j++) now[j] += w[i][j]; cpy[res] = i; dfs(res + 1,i + 1); for (int j = 1; j <= n; j++) now[j] -=w [i][j]; } return; } signed main() { cin >> n; int i,j; for (i = 1; i <= n; i++) cin >> v[i]; cin >> g; for (i = 1; i <= g; i++) for (j = 1; j <= n; j++) cin >> w[i][j]; dfs(1,1); printf("%lld ",minn - 1); for (i = 1; i < minn; i++) printf("%lld ",ans[i]); return 0; }