HDU 1074 (狀態壓縮dp)詳解

2021-07-16 10:37:21 字數 763 閱讀 7516

題目意思:ignatius同學,快到期末了結果還有好多課程沒有完成,每門課作業都有對應的截至日期,和完成它所需的時間,超過截至日期後,沒多一天扣1分,現在文他該如何安排寫作業的順序使得被扣的分最少?

輸入要求:t組資料,n門課,每門課的截至日期和完成所需的時間

輸出要求:被扣的分,和寫作業的順序。(如果有不同順序扣分相同的出現,輸出字典序)

#include 

#include

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f;//四個3f

struct node

homework[20];

struct kode

dp[1

<<15];

int main()

end=1

//後面需要利用前面求出來的temp1+dp[past].score

if(temp1+dp[past].score//如果先做這門課,比之前的情況更少扣分,那麼記錄下來}}

}stack

s;//構造乙個棧

int temp2=end-1;

cout

<< dp[temp2].score << endl;

while(temp2)

while(!s.empty())

}return

0;}

hdu 1074 狀態壓縮dp

題目描述 有 n 門課程的作業,每門都有完成期限d,與完成所需時間c,若超過期限,1天扣1分。問完成這n門作業至少要扣多少分,並輸出扣分最少的做作業順序。思路 dp i 記錄完成狀態為i的情況下的資訊。完成所需時間,上乙個狀態,最小扣分 狀態方程 dp i min dp j cost j,i 從j狀...

HDU 1074 狀態壓縮dp

起初想到貪心沒思路 看了題解 狀態壓縮dp 最多15個狀態 1,1 include stdio.h include stdlib.h include string.h include algorithm include include define n 1 15 5 define inf 1 30 ...

hdu1074狀態壓縮

很明顯的狀態壓縮題目。當然了如果他的意識只有是求最小值沒有要求輸出那個輸出的順序,那麼直接用揹包,甚至是貪心都是可以做出來的,但是要求順序這個揹包的話沒有辦法吧資料記錄下來。所以用二進位制壓縮。所謂的二進位制壓縮就是用二進位制來表示事情的完成程度和狀況,比如1,就是0000001表示第乙個作業做了,...