洛谷P1130紅牌(簡單DP)

2022-05-27 07:51:09 字數 1600 閱讀 6316

某地臨時居民想獲得長期居住權就必須申請拿到紅牌。獲得紅牌的過程是相當複雜 ,一共包括nnn個步驟。每一步驟都由**的某個工作人員負責檢查你所提交的材料是否符合條件。為了加快程序,每一步**都派了mmm個工作人員來檢查材料。不幸的是,並不是每乙個工作人員效率都很高。儘管如此,為了體現「公開**」的政策,**部門把每乙個工作人員的處理乙個申請所花天數都對外界公開。

為了防止所有申請人都到效率高的工作人員去申請。這m×nm \times nm×n個工作人員被分成mmm個小組。每一組在每一步都有乙個工作人員。申請人可以選擇任意乙個小組也可以更換小組。但是更換小組是很嚴格的,一定要相鄰兩個步驟之間來更換,而不能在某一步驟已經開始但還沒結束的時候提出更換,並且也只能從原來的小組i更換到小組i+1i+1i+1,當然從小組mmm可以更換到小組111。對更換小組的次數沒有限制。

例如:下面是333個小組,每個小組444個步驟工作天數:

小組111 : 2,6,1,82, 6 ,1 ,82,6,1,8

小組222 : 3,6,2,63,6, 2, 63,6,2,6

小組333 : 4,2,3,6 4, 2 ,3 ,64,2,3,6

例子中,可以選擇小組111來完成整個過程一共花了2+6+1+8=172+6+1+8=172+6+1+8=17天,也可以從小組222開始第一步,然後第二步更換到小組3,第三步到小組111,第四步再到小組222,這樣一共花了3+2+1+6=123+2+1+6=123+2+1+6=12天。你可以發現沒有比這樣效率更高的選擇。

你的任務是求出完成申請所花最少天數。

第一行是兩個正整數nnn和mmm,表示步數和小組數。接下來有mmm行,每行nnn個非負整數,第i+1(1≤i≤m)i+1(1 \le i \le m)i+1(1≤i≤m)行的第j個數表示小組iii完成第j步所花的天數,天數都不超過100000010000001000000。

乙個正整數,為完成所有步所需最少天數。。

輸入 #1

4 3 

2 6 1 8

3 6 2 6

4 2 3 6

輸出 #1

12

簡單dp,注意一層層更新。

#include using

namespace

std;

int a[2005][2005]=;

int dp[2005][2005]=;//

dp[i][j]表示在第i組完成第j項所花費的最少時間 dp[i][j]=min(dp[i][j-1]+a[i][j],dp[i-1][j-1]+a[i][j])

//前提是i-1>0

intn,m;

intmain()

dp[i][

1]=a[i][1

]; }

int ans=0x3f3f3f3f

;

for(j=1;j<=n;j++)

else dp[i][j]=min(dp[i][j-1]+a[i][j],dp[i-1][j-1]+a[i][j]);}}

for(i=1;i<=m;i++)ans=min(ans,dp[i][n]);

cout

}

洛谷 P1130 紅牌

某地臨時居民想獲得長期居住權就必須申請拿到紅牌。獲得紅牌的過程是相當複雜 一共包括n個步驟。每一步驟都由 的某個工作人員負責檢查你所提交的材料是否符合條件。為了加快程序,每一步 都派了m個工作人員來檢查材料。不幸的是,並不是每乙個工作人員效率都很高。儘管如此,為了體現 公開 的政策,部門把每乙個工作...

p1020 洛谷(簡單 dp)

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷達給出...

洛谷P1052 過河 dp

題目大意 獨木橋長度l,橋上有m個石頭,要過橋,起點0,只要跳到或者跳過l都算過了,每次跳躍距離是s t之間的整數值,問跳過橋最少需要踩到的石子數 dp i 表示跳躍了距離i,最少需要踩到的石子數。stone i 表示在距離i有無石頭。狀態轉移方程 dp i min dp i dp i j ston...