1. 程式人生 > >最大值最小化問題 和最小值最大化問題 ---(二分)

最大值最小化問題 和最小值最大化問題 ---(二分)

println 最大 最小 距離 方案 其中 第一個 pan lse

最大值最小化

即是當存在一個x為最大值的最小化,則x-1不成立,x+1可行,但他不滿足最小,所以設邊界最小值L,最大值R,二分查找第一個滿足題意的,

例子:

把一個包含n個正整數的序列劃分成m個連續的子序列。設第i個序列的各數之和為S(i),求所有S(i)的最大值最小是多少?

例如序列1 2 3 2 5 4劃分為3個子序列的最優方案為 1 2 3 | 2 5 | 4,其中S(1),S(2),S(3)分別為6,7,4,那麽最大值為7;

如果劃分為 1 2 | 3 2 | 5 4,則最大值為9,不是最小。

public class Main98 {
     
     
    
     
public static boolean p(int x,int []a,int n,int m){ int ans =1,sum=0; for(int i=0;i<n;i++){ sum+=a[i]; if(sum>x){ sum=a[i]; ans++; } } if(ans>m) return true;
else return false; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[] a = new int[n]; int x = 0; int min = 0,max = 10000; for
(int i=0;i<n;i++){ a[i] = sc.nextInt(); min= x>a[i]?x:a[i]; } while(min<max){ x = min+(max-min)/2; if(p(x,a,n,m)) min=x+1; else max=x; } System.out.println(min); } }

最小值最大化

即是當存在一個x為最小值的最大化,則x+1不成立,x-1可行,但他不滿足最大,所以設邊界最小值L,最大值R,二分查找第一個滿足題意的,

例子:

農民有用C只牛,然後他有N個隔間,每個隔間都有自己的坐標位置(一維的)pos,如何安排把牛安排進隔間才能使,所有牛之間距離的最小值最大,我們不需要求這個分配方案,我們只需要求這個最小距離的最大值,很裸的最小值最大化。

public class Main98{
    static int a[],n, m;
    public static boolean ok(int mid){
        int cnt=1;
        int tmp=a[0];
        for(int i=1;i<n;i++){
            if(a[i]-tmp>=mid){
                cnt++;
                tmp=a[i];
                if(cnt>=m)
                    return true;            
            }
        }
        return false;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         n= sc.nextInt();
         m = sc.nextInt();
         a= new int[n];
        for(int i=0;i<n;i++){
            a[i]=sc.nextInt();
        }
        Arrays.sort(a);
        int l=0,r=a[n-1];
            int mid;
            while(l<r){
                mid=l+(r-l)/2;
                if(ok(mid)){
                    l=m+1;
                }else
                    r=m;
            }
            System.out.println(r);
    }
}

總結:最大化最小化其實簡單來說就是二分查找,無非是條件不同,一個是滿足條件的最大的邊界,一個是滿足條件的最小的邊界。

最大值最小化問題 和最小值最大化問題 ---(二分)