蓝桥练习题题解——作物杂交——Java
作物雜交(難度較高,不應(yīng)該給大專的出啊)
時(shí)間限制:1.0s ? 內(nèi)存限制:256.0MB
問題描述
作物雜交是作物栽培中重要的一步。已知有?N?種作物(編號(hào)?1?至?N?),第?i?種作物從播種到成熟的時(shí)間為?Ti。
作物之間兩兩可以進(jìn)行雜交,雜交時(shí)間取兩種中時(shí)間較長的一方。如作物?A?種植時(shí)間為?5?天,作物?B?種植時(shí)間為?7?天,則?AB?雜交花費(fèi)的時(shí)間為?7?天。
作物雜交會(huì)產(chǎn)生固定的作物,新產(chǎn)生的作物仍然屬于?N?種作物中的一種。
初始時(shí),擁有其中?M?種作物的種子(數(shù)量無限,可以支持多次雜交)。同時(shí)可以進(jìn)行多個(gè)雜交過程。
求問對(duì)于給定的目標(biāo)種子,最少需要多少天能夠得到。
如存在?4?種作物?ABCD,各自的成熟時(shí)間為?5?天、7?天、3?天、8?天。初始擁有?AB?兩種作物的種子,目標(biāo)種子為?D,已知雜交情況為?A×B→C,A×C→D。
則最短的雜交過程為:
第?1?天到第?7?天(作物?B?的時(shí)間),A×B→C。
第?8?天到第?12?天(作物?A?的時(shí)間),A×C→D。
花費(fèi)?12?天得到作物?D?的種子。
輸入格式
輸入的第?1?行包含?4?個(gè)整數(shù)?N,M,K,T,N?表示作物種類總數(shù)(編號(hào)?1?至?N),M?表示初始擁有的作物種子類型數(shù)量,K?表示可以雜交的方案數(shù),T?表示目標(biāo)種子的編號(hào)。
第?2?行包含?N?個(gè)整數(shù),其中第?i?個(gè)整數(shù)表示第?i?種作物的種植時(shí)間?Ti(1≤Ti≤100)。
第?3?行包含?M?個(gè)整數(shù),分別表示已擁有的種子類型?Kj(1≤Kj≤M),Kj?兩兩不同。
第?4?至?K+3?行,每行包含?3?個(gè)整數(shù)?A,B,C,表示第?A?類作物和第?B?類作物雜交可以獲得第?C?類作物的種子。
輸出格式
輸出一個(gè)整數(shù),表示得到目標(biāo)種子的最短雜交時(shí)間。
樣例輸入
6 2 4 6 5 3 4 6 4 9 1 2 1 2 3 1 3 4 2 3 5 4 5 6樣例輸出
16樣例說明
第?1?天至第?5?天,將編號(hào)?1?與編號(hào)?2?的作物雜交,得到編號(hào)?3?的作物種子。
第?6?天至第?10?天,將編號(hào)?1?與編號(hào)?3?的作物雜交,得到編號(hào)?4?的作物種子。
第?6?天至第?9?天,將編號(hào)?2?與編號(hào)?3?的作物雜交,得到編號(hào)?5?的作物種子。
第?11?天至第?16?天,將編號(hào)?4?與編號(hào)?5?的作物雜交,得到編號(hào)?6?的作物種子。
總共花費(fèi)?16?天。
評(píng)測(cè)用例規(guī)模與約定
對(duì)于所有評(píng)測(cè)用例,1≤N≤2000,?2≤M≤N,?1≤K≤100000,?1≤T≤N, 保證目標(biāo)種子一定可以通過雜交得到。
題解:
package demo;import java.awt.Point; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class demo {static int aa[], dp[];static List<Point> bh[];public static void main(String[] args) throws IOException {StreamTokenizer x = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));x.nextToken();int n = (int) x.nval;x.nextToken();int m = (int) x.nval;x.nextToken();int k = (int) x.nval;x.nextToken();int t = (int) x.nval;aa = new int[n + 1];dp = new int[n + 1];bh = new List[n + 1];Arrays.fill(dp, Integer.MAX_VALUE);int bb[] = new int[m + 1];for (int i = 1; i <= n; i++) {x.nextToken();aa[i] = (int) x.nval;bh[i] = new ArrayList<Point>();}for (int i = 1; i <= m; i++) {x.nextToken();bb[i] = (int) x.nval;dp[bb[i]] = 0;}for (int i = 0; i < k; i++) {x.nextToken();int xx = (int) x.nval;x.nextToken();int yy = (int) x.nval;x.nextToken();int nn = (int) x.nval;bh[nn].add(new Point(xx, yy));}out.println(dfs(t));out.flush();}public static int dfs(int n) {if (dp[n] != Integer.MAX_VALUE)return dp[n];List<Point> p = bh[n];for (int i = 0; i < p.size(); i++) {int x = p.get(i).x, y = p.get(i).y;dp[n] = Math.min(dp[n], Math.max(dfs(x), dfs(y)) + Math.max(aa[x], aa[y]));}return dp[n];} }?
總結(jié)
以上是生活随笔為你收集整理的蓝桥练习题题解——作物杂交——Java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pmp每日三题(2022年3月14日)
- 下一篇: 第十三届蓝桥杯Java_C组题目