1 条题解
-
1
不多说 答案是两部分! 答案是两部分! 答案是两部分! 最少数+方案! dfs自己写吧
#include <bits/stdc++.h> using namespace std; int n,m,a[50],k[50][50],vis[20],ans = 100,p[20]; bool check() { for(int i=1; i <= n; i++) { int c = 0; for(int j=1; j <= m ;j++) { c += k[j][i] * vis[j]; } if(c < a[i]) { return false; } } return true; } void dfs(int num,int k) { if(check()) { if(ans > num) { ans = num; for(int i=1; i <= m;i++) { p[i] = vis[i]; } } } if(k > m) { return; } for(int i=k; i <= m ;i++) { vis[i] = 1; dfs(num+1,i+1); vis[i] = 0; } } 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 >> k[i][j]; } } dfs(0,1); cout << ans << " "; for(int i=1; i <= m;i++) { if(p[i]) { cout << i << " "; } } return 0; }
- 1
信息
- ID
- 1626
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 1
- 标签
- 递交数
- 75
- 已通过
- 55
- 上传者