import java.util.Scanner;
public class Main{
static int[] need = new int[26];
static int[][] flood = new int[16][26];
static int n,m;
static boolean[] vis = new boolean[30];
static int sum = 0;
static int[] d = new int[30];
static int min = Integer.MAX_VALUE;
static int[] ans = new int[30];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for (int i = 0; i < n; i++) {
need[i] = sc.nextInt();
}
m = sc.nextInt();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
flood[i][j] = sc.nextInt();
}
}
dfs(0,0);
System.out.print(min + " ");
for (int i = 0; i < min; i++) {
System.out.print(ans[i]+1 + " ");
}
}
public static void dfs(int step,int choose) {
if (step == m) {
if(check(choose)) {
if (choose < min) {
min = choose;
for (int i = 0; i < choose; i++) {
ans[i] = d[i];
}
}
}
return;
}
for (int i = step; i < m; i++) {
if(vis[i] == false) {
vis[i] = true;
d[choose] = i;
dfs(i+1, choose+1);
vis[i] = false;
d[choose] = 0;
}
}
}
public static boolean check(int x) {
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < x; j++) {
sum += flood[d[j]][i];
}
if (sum < need[i]) {
return false;
}
}
return true;
}
}
洛谷 P1460 健康的荷斯坦奶牛 —— Java(DFS)
最新推荐文章于 2025-08-23 17:26:52 发布
271

被折叠的 条评论
为什么被折叠?



