Codeforces 417A - Elimination【完全背包】

題目鏈接
題目簡介:
淘汰賽分 主淘汰賽次淘汰賽
主淘汰賽有 c 個問題,每輪產生 n 個獲勝者
次淘汰賽有 d 個問題,每輪產生 1 個獲勝者
需要從兩種淘汰賽中選出 n*m 個選手參加總決賽
并且有 k 個往屆總決賽的獲獎選手不需參加淘汰賽即可進入總決賽
問通過組織以上兩種淘汰賽選出 n*m 名選手(含往屆的 k 名選手)參加總決賽所需問題的最少數目

典型的完全背包問題

java實現如下:

import java.util.Scanner;

public class Main {

    static int c, d, n, m, k, v, dp[];

    //完全背包
    static void f_full(int cost, int val) {
        for (int i = cost; i <= v; i++)
            dp[i] = Math.max(dp[i], dp[i - cost] + val);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        c = sc.nextInt();
        d = sc.nextInt();
        n = sc.nextInt();
        m = sc.nextInt();
        k = sc.nextInt();
        int temp = n * m;
        if (k < temp) {
            
            //預設可取的背包空間
            v = Math.min(c * m, temp * d);
            dp = new int[v + 1];
            
            //初始化dp[0]為k
            dp[0] = k;
            
            //只有兩種方案
            f_full(c, n);
            f_full(d, 1);
            
            int i = 1;
            for (; i <= v; i++) {
                if (dp[i] >= temp)
                    break;
            }
            System.out.println(i);
        } else
            System.out.println(0);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容