HDU 1203 背包问题

题目大意:

根据学校的申请费用,根据已有的钱得到最大的offer率

这里很明显就是一个价值为概率的背包问题

计算两个offer合并的概率 为a + b - a*b

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 const int N = 10005;
 6
 7 double dp[N];
 8
 9 int main()
10 {
11     int n , m , a;
12     double b;
13     while(scanf("%d%d" , &m , &n)){
14         if(n == 0 && m == 0) break;
15         memset(dp , 0 , sizeof(dp));
16         for(int i = 0 ; i<n ; i++){
17             scanf("%d%lf" , &a , &b);
18             for(int j = m ; j>=a ; j--){
19                 double tmp = dp[j-a] + b - dp[j-a]*b;
20                 dp[j] = max(dp[j] , tmp);
21             }
22         }
23         printf("%.1f%%\n" , dp[m] * 100);
24     }
25     return 0;
26 }
时间: 2024-10-11 21:37:15

HDU 1203 背包问题的相关文章

hdu 1203 概率+01背包

I NEED A OFFER! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1203 Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.Speakless没有多少钱,总共只攒了n万美元

hdu 1203 01背包 I need a offer

hdu 1203  01背包  I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offer的概率以及花费,给定money,求得到至少一份offer的最大概率. 简单的01背包 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 6 double

hdu 1203 dp背包问题

一个背包问题将价值变成了概率,求最小的一个收不到的概率,然后用1减去就可以啦! #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string>

HDU 1203 01背包变形题,(新思路)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33303    Accepted Submission(s): 13470 Problem Description Speakless很早就想出国,现在

HDU 1203 I NEED A OFFER!

题目: Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.Speakless没有多少钱,总共只攒了n万美元.他将在m个学校中选择若干的(当然要在他的经济承受范围内).每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b.不同学校之间是否得到offer不会互相影响."I NEED A

hdu 1203

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

hdu 1203 dp(关于概率的```背包?)

题意:一个人手里有一笔钱 n ,有 m 所大学,分别知道这些大学的投简历花费和被录取概率,因为钱数有限,只能投一部分学校,问被录取的概率最大有多大. 这题除去计算概率以外就是一个 0 1 背包问题,所以可以完全按照 0 1 背包的方法做,只是将价值计算变成概率计算而已 dp [ j ] 表示花费了 j 时概率的最大值: 当遍历到第 i 个大学时,第 i 个大学花费 a ,被录取的概率 b ,当前被录取概率为 dp:那个加上第 i 所大学,概率就是: (原本被录取概率)+(原本未被录取概率)* b

HDU 1203 I NEED A OFFER! 01背包 概率运算预处理。

题目大意:中问题就不说了 ^—^~ 题目思路:从题目来看是很明显的01背包问题,被录取的概率记为v[],申请费用记为w[].但是我们可以预先做个处理,使问题解决起来更方便:v[]数组保留不被录取的概率,则dp[j]则代表在j元费用下,不被录取的最低概率是多少,最后用1减去dp[n]即可. dp式子为:dp[j]=min(dp[j],dp[j-w[i]]*v[i]); (j表示共有j元申请费用). 详细看代码注释 #include<cstdio> #include<stdio.h>

I NEED A OFFER! (hdu 1203 01背包)

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18054    Accepted Submission(s): 7237 Problem Description Speakless非常早就想出国,如今他已经考完了全部须要的考试,准备了全部要准备的材料,于是.便须要去申请学校了.要申请国外的不论什么大学,