01背包+概率问题 计蒜客 offer
題目:
蒜頭君很早就想出國(guó),現(xiàn)在他已經(jīng)考完了所有需要的考試,準(zhǔn)備了所有要準(zhǔn)備的材料,于是,便需要去申請(qǐng)學(xué)校了。要申請(qǐng)國(guó)外的任何大學(xué),你都要交納一定的申請(qǐng)費(fèi)用,這可是很驚人的。蒜頭君沒(méi)有多少錢(qián),總共只攢了 n 萬(wàn)美元。他將在 m 個(gè)學(xué)校中選擇若干的(當(dāng)然要在他的經(jīng)濟(jì)承受范圍內(nèi))。每個(gè)學(xué)校都有不同的申請(qǐng)費(fèi)用a(萬(wàn)美元),并且蒜頭君估計(jì)了他得到這個(gè)學(xué)校 offer 的可能性 b。
不同學(xué)校之間是否得到 offer 不會(huì)互相影響。“I NEED A OFFER”,他大叫一聲。幫幫這個(gè)可憐的人吧,幫助他計(jì)算一下,他可以收到至少一份offer的最大概率。(如果蒜頭君選擇了多個(gè)學(xué)校,得到任意一個(gè)學(xué)校的offer都可以)。
輸入格式
第一行有兩個(gè)正整數(shù) n,m(0≤n≤10000,0≤m≤10000)n,m(0 \le n \le 10000,0 \le m \le 10000)n,m(0≤n≤10000,0≤m≤10000)。
后面的 m 行,每行都有兩個(gè)數(shù)據(jù) aia_iai?(整型), bib_ibi? (實(shí)型)分別表示第 i 個(gè)學(xué)校的申請(qǐng)費(fèi)用和可能拿到 offer 的概率。
輸出格式
每組數(shù)據(jù)都對(duì)應(yīng)一個(gè)輸出,表示蒜頭君可能得到至少一份 offer 的最大概率。用百分?jǐn)?shù)表示,精確到小數(shù)點(diǎn)后一位。
輸出時(shí)每行末尾的多余空格,不影響答案正確性
要求使用「文件輸入輸出」的方式解題,輸入文件為 offer.in,輸出文件為 offer.out
樣例輸入
10 3
4 0.1
4 0.2
5 0.3
樣例輸出
44.0%
分析:
- 當(dāng)看見(jiàn)01背包問(wèn)題的模型(有 n個(gè)物品和一個(gè)容量為 W 的背包,每個(gè)物品有重量 wiw_{i}wi? 和價(jià)值viv_{i}vi?兩種屬性,要求選若干物品放入背包使背包中物品的總價(jià)值最大且背包中物品的總重量不超過(guò)背包的容量。),再考慮如何將某offer放入
- dp[j]表示花費(fèi)j元,至少可以拿到一個(gè)學(xué)校的offer的概率。
- 當(dāng)有一所學(xué)校是花費(fèi)x元拿到offer的概率是y。所以這個(gè)時(shí)候就是1.0-(1- dp[j-x])*(1-y),先計(jì)算一 個(gè)都考不上的概率,然后它的補(bǔ)集即是至少可以考上一個(gè)學(xué)校的概率。
- 狀態(tài)轉(zhuǎn)移方程:
dp[j]=max(dp[j],1.0?(1?dp[j?x])?(1?y))dp[j]= max(dp[j],1.0-(1- dp[j-x])*(1- y))dp[j]=max(dp[j],1.0?(1?dp[j?x])?(1?y))
AC代碼:
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; const int M=1e4+10; const int inf=0x3f3f3f3f; double dp[M],b[M]; int a[M]; int n,m; int main(){freopen("offer.in", "r", stdin);freopen("offer.out", "w", stdout);cin>>n>>m;for(int i=0;i<m;i++)cin>>a[i]>>b[i];for(int i=0;i<m;i++)for(int j=n;j>=a[i];j--)dp[j]=max(dp[j],1.0-(1-dp[j-a[i]])*(1-b[i]));printf("%.1f%%\n",dp[n]*100);//cout<<dp[n]*100<<"%"<<endl; }總結(jié)
以上是生活随笔為你收集整理的01背包+概率问题 计蒜客 offer的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Nginx反向代理和前端全缓存相关配置教
- 下一篇: 构造前缀贪心+ 计蒜客 子矩阵求和