赞
踩
目的是局部最优,可以考虑轮流寻找每个用户的最小值然后计算其他用户的值取最小。
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int num = Integer.parseInt(sc.nextLine());
- String []str = new String[num];
-
- for (int i = 0; i < num; i++) {
- str[i] = sc.nextLine();
- }
-
- //轮流数组
- int step = 0;
- int sum = 0;
- int minSum = Integer.MAX_VALUE;
- //记录大轮数
- int out = num;
- //记录小轮数
- int count = 0;
- //flag数组记录每个数组取值的下标
- int []flag = new int[num];
- Arrays.fill(flag,-1);
- while (out!=0){
- if (step==0)
- flag[step]=min(str[step],flag[step+1]);
- else
- flag[step]=min(str[step],flag[step-1]);
- sum += Integer.parseInt(str[step].split(" ")[flag[step]]);
- step++;
- count++;
- if (step==num)
- step = 0;
-
- if (count==num){
- if (sum<minSum)
- minSum =sum;
- count = 0;
- out--;
- step = num-out;
- Arrays.fill(flag,-1);
- sum = 0;
- }
- }
- System.out.println(minSum);
- }
-
- public static int min(String str,int k){
- String []nums = str.split(" ");
- int min = Integer.MAX_VALUE;
- int pos = 0;
- for (int i = 0; i < nums.length; i++) {
- if (Integer.parseInt(nums[i])<min&&i!=k){
- min = Integer.parseInt(nums[i]);
- pos = i;
- }
- }
- return pos;
- }
如有错误或改进,请各位大佬支招。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。