http://acm.hust.edu.cn/vjudge/contest/125771#problem/F 动态01背包

Description

Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。“I NEED A OFFER”,他大叫一声。帮帮这个可怜的人吧,帮助他计算一下,他可以收到至少一份offer的最大概率。(如果Speakless选择了多个学校,得到任意一个学校的offer都可以)。

Input

输入有若干组数据,每组数据的第一行有两个正整数n,m(0<=n<=10000,0<=m<=10000) 
后面的m行,每行都有两个数据ai(整型),bi(实型)分别表示第i个学校的申请费用和可能拿到offer的概率。 
输入的最后有两个0。

Output

每组数据都对应一个输出,表示Speakless可能得到至少一份offer的最大概率。用百分数表示,精确到小数点后一位。

Sample Input

10 3
4 0.1
4 0.2
5 0.3
0 0

样例输出

44.0%
___________这是个动态问题,,同样是01背包,,,因为要求至少一份的情况   所以是求一个都被不录取的概率的最小值   反之用1减去 得到至少一份的概率  其中初始化非常重要   因为是概率要相乘  所以都初始化为一
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 10234
struct node
{
    int x;
    double e,f;
}q[N];
double dp[N];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m),n+m)
    {
        for(int i=0;i<m;i++)
        {
             scanf("%d%lf",&q[i].x,&q[i].e);
             q[i].f=1-q[i].e;
        }
        for(int i=0;i<=n;i++)
            dp[i]=1;for(int i=0;i<m;i++)
        {
            for(int j=n;j>=q[i].x;j--)
            {
                dp[j]=min(dp[j],dp[j-q[i].x]*q[i].f);
                ///printf("%f\n",dp[j]);
            }
        }
        printf("%.1f%%\n",(1-dp[n])*100);
    }
    return 0;
}
				
时间: 2024-10-19 12:12:38

http://acm.hust.edu.cn/vjudge/contest/125771#problem/F 动态01背包的相关文章

http://acm.hust.edu.cn/vjudge/contest/125771#problem/B 很水的01

Description Farmer John recently bought another bookshelf for the cow library, but the shelf is getting filled up quite quickly, and now the only available space is at the top. FJ has N cows (1 ≤ N ≤ 20) each with some height of Hi (1 ≤ Hi ≤ 1,000,00

POJ3156 暑假集训-最短路H题floyd http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#rank

  http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#rank#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<limits.h> #include<mat

8.14比赛j题 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87813#overview

就我个人来说我觉得这道题其实不用写题解,只是因为做的时候错了一次,如果不是队友细心,我根本会错下去,所以我感觉自己必须强大#include<stdio.h> #include<string.h> #include<ctype.h> #include<queue> #include<algorithm> using namespace std; #define N 300100 int n, m, cnt; char str[N]; int v[N

暑假集训第一周比赛G题http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/G

G - 向 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description 把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果. Input 每行包含一个

暑假集训第一周比赛C题http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C

C - 学 Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如

HDU5120 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93642#problem/I

这题求的是圆环相交的面积,画图可知  圆环相交面积=大交大-2×大交小+小交小 这题需要用到圆的相交面积公式 AC代码: 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <algorithm> 5 #define exp 1e-10 6 #define PI 3.141592654 7 using namespace std; 8 typedef long l

POJ-3126 暑假集训-搜索进阶F题http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/F

经验就是要认真细心,要深刻理解.num #include<iostream>#include<algorithm>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<ctype.h>#include<queue>using namespace std;#define N 11000 typedef struc

HDU2612 -暑假集训-搜索进阶N http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/N

这两天总是因为一些小错误耽误时间,我希望自己可以细心点.珍惜时间,珍爱生命!#include<iostream> #include<algorithm> #include<string.h> #include<ctype.h> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<limits.h> #include<queue>

HDU-4632 http://acm.hdu.edu.cn/showproblem.php?pid=4632

http://acm.hdu.edu.cn/showproblem.php?pid=4632 题意: 一个字符串,有多少个subsequence是回文串. 别人的题解: 用dp[i][j]表示这一段里有多少个回文串,那首先dp[i][j]=dp[i+1][j]+dp[i][j-1],但是dp[i+1][j]和dp[i][j-1]可能有公共部分,所以要减去dp[i+1][j-1]. 如果str[i]==str[j]的话,还要加上dp[i+1][j-1]+1. 但是自己却是这样想的,把每个区间都要看