注意:主类的名字必须是:Main,否则按无效代码处理。
枚举所有的可能性,求结果值然后取最小即可;
package 总决赛; import java.io.*; import java.util.Collections; import java.util.Scanner; import java.util.HashSet; public class 居民集会 { static boolean vis[]; static int L;//公路长度 static int lc = 0;//路程开销 static HashSet<Integer>hs = new HashSet<Integer>(); static int min_value(int[][]a){//求出di的最小值 int min = a[0][0]; for(int i=1;i<a.length;i++){ if(a[i][0] < min) min = a[i][0]; } return min; } static int max_value(int[]a){// int max = a[0]; for(int i=1;i<a.length;i++){ if(a[i] > max) max = a[i]; } return max; } static void dfs(int[][]a,int[]l,int d){//l存四个点的位置 if(d >3){ l[3] = L;//第四个位于公路终点 int z = 0; for(int i =0;i<a.length;i++){ for(int j=0;j<4;j++){ if(a[i][0] <= l[j]) { z +=a[i][1] * (l[j] - a[i][0]); break; } else{ continue; } } } hs.add(z); return; } for(int i =0;i<a.length;i++){ if(!vis[i]){ l[d++] = a[i][0]; dfs(a,l,d); d--; vis[i] = false; } } } public static void main(String[] args) { // TODO Auto-generated method stub Scanner s = new Scanner(System.in); int n = s.nextInt();//家庭数 L = s.nextInt();//公路长度 int[][]a = new int[n][2]; vis = new boolean[n]; for(int i=0;i<n;i++){ a[i][0] = s.nextInt(); a[i][1] = s.nextInt(); } dfs(a,new int[4],0); int min = Collections.min(hs); System.out.println(min); } }