買紀念品 搶劫銀行(01揹包變種題)

2021-10-05 10:37:18 字數 1145 閱讀 1614

大致題意:有乙個人想要搶劫銀行,每家銀行都具有一定的金額和被抓到的概率,知道他被抓的最大概率,求他在被抓的情況下,搶劫最多能有多少金額。

題解:如果原本按照揹包的思想dp陣列的下標應該是概率,但是下標不可能是小數,換種思路把不同價值和對應的概率儲存在dp陣列中,這樣最後只需要價值大的往價值小的遍歷一遍,找到第乙個概率小於等於被抓概率的dp[i],這個下標i 就是對應的最大價值。算概率就用到了一種轉化思維。所以這題對思維的轉變得到訓練。

**:#include< iostream>

#include< cstdio>

#include< algorithm>

#include< cstring>

using namespace std;

const int n=5000;

int a[n];

double dp[20000],b[n];

int main()

memset(dp,0,sizeof(dp));

dp[0]=1.0; //這個很重要

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

for(int i=sum;i>=0;--i)//遍歷一遍找到不會被抓的

}}return 0;

}

大致題意:給定n個物品的價錢和m總錢,問最多能買到的物品數有幾種方案。

題解:設動態陣列dp[i][j][k]表示的是前i個物品總價錢為j所有的k種方案數。

動態方程dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-v[i]][k-1];

用滾動陣列優化:dp[j][k]=dp[j][k]+dp[j-a[i]][k-1];

#include< iostream>

#include< iomanip>

#include< cstring>

#include< cstdio>

using namespace std;

const int inf=0x3f3f3f3f;

int a[35],dp[505][35];

int main()

}if(!***)

printf(「sorry, you can』t buy anything.\n」);

}return 0;

}

紀念品分組

問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時 間內發完所有紀念品,樂樂希望分組的數目最少。你的任務...

紀念品分組

time limit 1 sec memory limit 128 mb submit 4 solved 2 submit status web board 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但...

紀念品分組

題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是...