大致題意:有乙個人想要搶劫銀行,每家銀行都具有一定的金額和被抓到的概率,知道他被抓的最大概率,求他在被抓的情況下,搶劫最多能有多少金額。
題解:如果原本按照揹包的思想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 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但...
紀念品分組
題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是...