Java P1460 健康的荷斯坦奶牛 Healthy Holsteins

题目链接
dfs题目

import java.util.*;
import java.math.*;
public class Main {
     
	public static int[] dx={
     1,1,-1,-1,0,0,1,-1};
	public static int[] dy={
     -1,1,1,-1,1,-1,0,0};
	public static List<Integer> ans=new ArrayList<Integer>();
	public static List<Integer> jie;
	public static int res=10000;
	public static int[][] nums;
    public static void main(String[] args){
     
    	Scanner sc=new Scanner(System.in);
    	int v=sc.nextInt();
    	int[] str=new int[v];
    	for(int i=0;i<v;i++)
    		str[i]=sc.nextInt();
    	int n=sc.nextInt();
    	nums=new int[n][v];
    	for(int i=0;i<n;i++){
     
    		for(int j=0;j<v;j++)
    			nums[i][j]=sc.nextInt();
    	}
    	int[] sum=new int[v];
    	dfs(0,sum,str);
    	System.out.print(res+" ");
    	for(int i:jie)
    		System.out.print(1+i+" ");
    	
    }
    public static void dfs(int cur,int[] sum,int[] str){
     
    	int v=sum.length,i;
    	for(i=0;i<v;i++){
     
    		if(sum[i]<str[i])
    			break;
    	}
    	if(i==v){
     
    		if(ans.size()<res){
     
    			jie=new ArrayList<Integer>(ans);
    			res=ans.size();
    			return;
    		}
    	}
    	if(cur>=nums.length)
    		return;
    	ans.add(cur);
    	for(int j=0;j<v;j++){
     
    		sum[j]+=nums[cur][j];
    	}
    	dfs(cur+1,sum,str);
    	ans.remove(ans.size()-1);
    	for(int j=0;j<v;j++){
     
    		sum[j]-=nums[cur][j];
    	}
    	dfs(cur+1,sum,str);
    }
    
}

你可能感兴趣的:(洛谷,java,dfs,算法,java)