dp基礎習題(4 7)

2021-07-11 01:44:17 字數 1210 閱讀 7345

題意:在ktv唱歌的時候,如果已經到時間了,是可以唱完最後一首的。ktv中一定有一首叫《勁歌金曲》的歌時長678s。且保證沒有歌是比它長的。求在總曲數盡量多得前提下,唱歌的時間盡量長

思路:首先我們可以確定,一定要唱勁歌金曲。這就意味著其他的歌最多只能唱t - 1s.且最後唱歌的總數加一,唱歌的時間加上 678 s

要保證兩個條件,在遞推的過程中,我們需要判斷是否能替換該點。就首先需要判斷哪個個數多,個數一樣的再判斷哪個時間長,用個數多時間長的點替換掉舊點即可。用滾動陣列降低複雜度。其餘同簡單零一揹包。

**:

#include #include #include using namespace std;

struct node

}dp[10005];

int a[55];

int main()

for(int i = 0; i < n; i ++)}}

printf("case %d: %d %d\n",t,dp[time - 1].num + 1,dp[time - 1].length + 678);

}return 0;

}

題意:你需要買n種燈,每種燈分別有v電壓值,k電源費用,c每個燈泡費用,l所需燈泡數目。每一種燈有乙個電源就夠了,你可以用電壓值的的燈,替換電壓值小的燈。問最少費用是多少

思路:首先對電壓進行排序。保證大的電壓在後面可以替換前面的。用陣列s[i],記錄從0到i中燈所需的數量。dp[i]記錄的是從0到第i種燈,所需的最小費用。初始化每個d[i] = a[i].k +a[i]. s * a[i].c;代表從0到i全部用第i種燈,然後再遍歷如果一部分有這種燈,一部分用前面已經求好的d[j],哪個小

**:

//注意應該在排序之後統計從0到i的個數

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

int dp[1005];

struct t

}a[1005];

int main()

sort(a,a + n);//保證高壓的在低壓的之後

for(int i = 0;i < n; i ++)//求從0到i的個數之和

for(int i = 0; i < n; i ++)

}printf("%d\n",dp[n - 1]);

}return 0;

}

狀壓dp基礎習題

題解非常基礎的一道狀壓dp 我們用二進位制來表示每一行取數情況,1 11表示取,0 00表示不取 很容易得到狀態轉移方程 f i j max f i j f i 1 k a ns i j f i j max f i j f i 1 k ans i j f i j ma x f i j f i 1 k...

47 前端基礎一

1 web服務的本質 瀏覽器發請求 http協議 服務端接收請求 服務端返回響應 服務端把html檔案內容發給瀏覽器 瀏覽器渲染頁面 2 超文字標記語言是一種用於建立網頁的標記語言 html xml 3 最基本的html文件 doctype html html lang zh cn head met...

Linux 系統程式設計實戰 4 7習題

3.編寫乙個函式,從字串s的第i個字元開始刪除n個字元 注意要檢查輸入引數 4.用遞迴方法求乙個n個數的整形陣列的最大值 1 include2 include 3 include4 5void deletestr char param,int startindex,int number else 1...