題目鏈接
題目簡介:
淘汰賽分 主淘汰賽 和 次淘汰賽:
主淘汰賽有 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);
}
}