Week12作業 E 選做題 2 狀壓dp

2021-10-06 00:23:53 字數 1049 閱讀 3909

馬上假期就要結束了,zjm還有 n 個作業,完成某個作業需要一定的時間,而且每個作業有乙個截止時間,若超過截止時間,一天就要扣一分。

zjm想知道如何安排做作業,使得扣的分數最少。

tips: 如果開始做某個作業,就必須把這個作業做完了,才能做下乙個作業。

有多組測試資料。第一行乙個整數表示測試資料的組數

第一行乙個整數 n(1<=n<=15)

接下來n行,每行乙個字串(長度不超過100) s 表示任務的名稱和兩個整數 d 和 c,分別表示任務的截止時間和完成任務需要的天數。

這 n 個任務是按照字串的字典序從小到大給出。

每組測試資料,輸出最少扣的分數,並輸出完成作業的方案,如果有多個方案,輸出字典序最小的乙個。

n較小,但狀態複雜,考慮使用狀態壓縮。

狀態s:查詢s中是否有編號為i的點:s&(1《一道狀壓dp問題,很好的考察了位運算、狀態壓縮以及dp的思想。以前的dp都是遍歷至新狀態,然後根據舊狀態求出新狀態的各種值,而這道題是遍歷至舊狀態,然後新增元素得到新狀態並且求出新狀態的各種值。

#include

#include

#include

using

namespace std;

//f[s]表示完成s作業集合後被扣的最少分數

//sum=s作業集合對應總時間

//tmp=max(sum+c[x]-d[x],0) 作業x被扣的分數

//f[s|(1string str[16]

;int d[16]

,c[16];

int f[

100000];

int sum[

100000];

int pre[

100000];

//pre[s]表示s的最後乙個作業

void

output

(int s)

intmain()

}}}int s=(1

<; cout<

output

(s);

}}

Week12 作業選做題(區間dp,狀壓dp)

406簡化一下題意 要找由 四個字元組成的字串的最長子序列,這個子串行必須滿足,所有的括號裡都不能包含單數個另一種括號的一邊 這一邊無法再匹配到另一半 那麼,這道題就成為了區間dp的典型題。剛開始遍歷左右括號之間距離為0的情況,再遍歷距離為1,2 n的情況。按順序從左到右遍歷,根據狀態轉移方程 j ...

Week12作業 必做題

a給出n個數,zjm想找出出現至少 n 1 2次的數,現在需要你幫忙找出這個數是多少?input 本題包含多組資料 每組資料報含兩行。第一行乙個數字n 1 n 999999 保證n為奇數。第二行為n個用空格隔開的整數。資料以eof結束。output 對於每一組資料,你需要輸出你找到的唯一的數。實現 ...

選做題 2 Week12作業E題

馬上假期就要結束了,zjm還有 n 個作業,完成某個作業需要一定的時間,而且每個作業有乙個截止時間,若超過截止時間,一天就要扣一分。zjm想知道如何安排做作業,使得扣的分數最少。tips 如果開始做某個作業,就必須把這個作業做完了,才能做下乙個作業。輸入 有多組測試資料。第一行乙個整數表示測試資料的...