hdu 1074 狀態壓縮dp

2021-06-21 21:31:24 字數 858 閱讀 4318

題目描述:有 n 門課程的作業,每門都有完成期限d,與完成所需時間c,若超過期限,1天扣1分。

問完成這n門作業至少要扣多少分,並輸出扣分最少的做作業順序。

思路:dp[i]記錄完成狀態為i的情況下的資訊。(完成所需時間,上乙個狀態,最小扣分)

狀態方程:dp[i] = min(dp[j]+cost(j,i)) (從j狀態能到i狀態)

code:

#include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define inf 0x3f3f3f3f

#define m 1<<15

struct node

dp[m];

struct course

c[16];

void print(int s)//遞迴列印解

id--;

if(dp[s].pre)

print(dp[s].pre);

printf("%s\n",c[id].name);

}int main()

{ int t;

int n,i,j;

scanf("%d",&t);

while(t--)

{scanf("%d",&n);

for(i=0;i=0;j--)

{if(i&(1tem=dp[last].sub+dp[last].cost+c[j].need-c[j].dead;

else tem=dp[last].sub;

if(tem

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 ...

HDU 1074 (狀態壓縮dp)詳解

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

hdu1074狀態壓縮

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