2018 藍橋 動態規劃

2021-08-17 23:29:37 字數 1258 閱讀 7348

0/1揹包問題:  給定容量v的揹包,現在有多個物品要放入揹包,每個物品有一定的體積和價值,要求在揹包可以放下的情                                    況下放入的物品的總價值最大(下面給的裝箱問題其實也一樣的,求總空間最小,其實可以理解為求裝入的物品的體積最大化,那麼把物品的價值賦值為體積,求體積最大也就是求價值最大!)!

(部分揹包問題):貪心

對於部分揹包問題,因為物品可以放一部分,而不是必須整體放入。所以可以直接用貪心演算法是可以直接解出來的。什麼是貪心演算法?通俗地講就是選擇的每一步都是最優的。

(全部揹包問題):動態規劃

演算法訓練 裝箱問題  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30),每個物品有乙個體積(正整數)。

要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。

輸入格式

第一行為乙個整數,表示箱子容量;

第二行為乙個整數,表示有n個物品;

接下來n行,每行乙個整數表示這n個物品的各自體積。

輸出格式

乙個整數,表示箱子剩餘空間。

樣例輸入

24 6

8 3

12 7

9 7

樣例輸出 0

//全部揹包問題

#include#include#include#include#include#includeusing namespace std;

int volume[30]; int need[30];//容量和需求度(價值)陣列

int cache[40000][30];//剛好寫成20000就出錯了

int package(int capacity,int item)

int &ret = cache[capacity][item];//動態規劃固定的寫法

if (ret!=0)

//不放入

ret=package(capacity, item - 1);

//放入(忘記考慮容量這個條件了)

if (capacity>=volume[item])

return ret;

}int main()

cout << ca-package(ca,n-1) << endl;

return 0;

}

選法應該是2^n次方(即每個物品都是選或者不選的區別)

藍橋 K好數 動態規劃

題目描述 如果乙個自然數n的k進製表示中任意的相鄰的兩位都不是相鄰的數字,那麼我們就說這個數是k好數。求l位k進製數中k好數的數目。例如k 4,l 2的時候,所有k好數為11 13 20 22 30 31 33 共7個。由於這個數目很大,請你輸出它對1000000007取模後的值。輸入 輸入包含兩個...

藍橋杯 對局匹配 動態規劃

時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入格式 第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 對於100 的資料,1 n 100000,0 ai 100000,0 k 100000 輸出格式 乙個整數,代表答案。樣例輸入 10 0...

壘骰子動態規劃 藍橋杯

壘骰子 賭聖atm晚年迷戀上了壘骰子,就是把骰子乙個壘在另乙個上邊,不能歪歪扭扭,要壘成方柱體。經過長期觀察,atm 發現了穩定骰子的奧秘 有些數字的面貼著會互相排斥!我們先來規範一下骰子 1 的對面是 4,2 的對面是 5,3 的對面是 6。假設有 m 組互斥現象,每組中的那兩個數字的面緊貼在一起...