長沙建設(shè)公司網(wǎng)站網(wǎng)絡(luò)推廣產(chǎn)品公司
題目描述:
在系統(tǒng)、網(wǎng)絡(luò)均正常的情況下組織核酸采樣員和志愿者對人群進行核酸檢測篩查。每名采樣員的效率不同,采樣效率為N人/小時。由于外界變化,采樣員的效率會以M人/小時為粒度發(fā)生變化,M為采樣效率浮動粒度,M=N10%,輸入保證N10%的結(jié)果為整數(shù)。采樣員效率浮動規(guī)則:采樣員需要一名志愿者協(xié)助組織才能發(fā)揮正常效率,在此基礎(chǔ)上,每增加一名志愿者,效率提升1M,最多提升3M;如果沒有志愿者協(xié)助組織,效率下降2M。
怎么安排速度最快?求總最快檢測效率(總檢查效率為各采樣人員效率值相加)。
輸入描述:
第一行:第一個值,采樣員人數(shù),取值范圍[1,100];第二個值,志愿者人數(shù),取值范圍[1,500];
第二行:各采樣員基準效率值(單位人/小時),取值范圍[60,600],保證序列中每項值計算10%為整數(shù)
輸出描述:
第一行:總最快檢測效率(單位人/小時)
補充說明:
輸入需要保證采樣員基準效率值序列的每個值*10%為整數(shù)
示例
輸入:
2 2
200 200
輸出:
400
題目解析
解題思路
求最優(yōu)解,可以考慮使用動態(tài)規(guī)劃的方式實現(xiàn)。而動態(tài)規(guī)劃主要是設(shè)置狀態(tài)轉(zhuǎn)移方程。
狀態(tài)轉(zhuǎn)移方程思路:
每次新增加一個醫(yī)生,需要考慮給他配置幾個志愿者【0,1,2,3】才能最優(yōu)
dp[M:醫(yī)生數(shù)][N:志愿者數(shù)量] 【注意: dp[M-1]的所有狀態(tài)已經(jīng)得到最優(yōu)解了 】
- 如果不分配志愿者,則=dp[M-1][N] + 該醫(yī)生效率減少20%
- 如果分配1個志愿者,則=Max(不分配志愿者,dp[M-1][N-1]+該醫(yī)生效率)
- 如果分配2個志愿者,則=Max(分配1個志愿者,dp[M-1][N-2]+該醫(yī)生效率+提升2倍效率)
- 如果分配3個志愿者,則=Max(分配2個志愿者,dp[M-1][N-3]+該醫(yī)生效率+提升3倍效率)
注意:以上需要按順序比較
java代碼實現(xiàn)
package com.HW;import javax.net.ssl.HandshakeCompletedListener;
import java.util.Arrays;
import java.util.Collections;/*** @ClassName : TNucleicAcidTesting* @Author : kele* @Date: 2023/10/22 14:42* @Description : 核酸檢測人員安排*/
public class TNucleicAcidTesting {public static void main(String[] args) {handle("2 2", "200 200");}