标签:content problems mode offer 大学 cto man family linker
Speakless没有多少钱。总共仅仅攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每一个学校都有不同的申请费用a(万美元)。而且Speakless预计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。“I NEED A OFFER”,他大叫一声。帮帮这个可怜的人吧。帮助他计算一下,他能够收到至少一份offer的最大概率。(假设Speakless选择了多个学校。得到随意一个学校的offer都能够)。
10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a ‘%‘.
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #pragma comment (linker,"/STACK:102400000,102400000") #define maxn 10005 #define MAXN 2005 #define mod 1000000009 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-6 #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r #define FRE(i,a,b) for(i = a; i <= b; i++) #define FRL(i,a,b) for(i = a; i < b; i++) #define mem(t, v) memset ((t) , v, sizeof(t)) #define sf(n) scanf("%d", &n) #define sff(a,b) scanf("%d %d", &a, &b) #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c) #define pf printf #define DBG pf("Hi\n") typedef long long ll; using namespace std; //dp[i]表示花费i万元得不到offer的最小概率 double dp[maxn],p[maxn]; int n,m; int w[maxn]; int main() { int i,j; while (sff(n,m)) { if (n==0&&m==0) break; FRE(i,1,m) { scanf("%d%lf",&w[i],&p[i]); p[i]=1.0-p[i]; //得不到的概率 } FRL(i,0,n+1) //初始化为1.0 dp[i]=1.0; FRE(i,1,m) { for (j=n;j>=w[i];j--) dp[j]=min(dp[j],dp[j-w[i]]*p[i]); } pf("%.1lf%%\n",(1-dp[n])*100); //那么得到的最大概率就是1-dp[n]了 } return 0; }
I NEED A OFFER! (hdu 1203 01背包)
标签:content problems mode offer 大学 cto man family linker
原文地址:http://www.cnblogs.com/gccbuaa/p/6884731.html