HDU-1203-I NEED A OFFER! (简单DP!)

I NEED A OFFER!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 17099    Accepted Submission(s): 6831

Problem 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

Sample Output

44.0%

Hint

You should use printf("%%") to print a ‘%‘.

Author

Speakless

Source

Gardon-DYGG Contest 2

自从集训后就没做过DP,先做个简单的,但是还没理解透,以后再自己研究研究....

AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 10005;
double dp[maxn];

int main()
{
	int n, m, fee[maxn];
	double pro[maxn];
	while(scanf("%d %d", &n, &m), n || m)
	{
		memset(dp, 0, sizeof(dp));
		for(int i=1; i<=m; i++)
		{
			scanf("%d %lf", &fee[i], &pro[i]);
		}
		for(int i=0; i<=n; i++)
			dp[i] = 1.0;
		for(int i=1; i<=m; i++)
		{
			for(int j=n; j>=fee[i]; j--)
			{
				if(dp[j] > dp[j-fee[i]]*(1.0-pro[i]))
					dp[j] = dp[j-fee[i]]*(1.0-pro[i]);
			}
		}
		printf("%.1lf%%\n", (1-dp[n])*100.0);
	}
	return 0;
} 
时间: 2024-11-04 00:54:35

HDU-1203-I NEED A OFFER! (简单DP!)的相关文章

HDU 1203 I NEED A OFFER!(dp)

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

HDU 3016 Man Down 线段树+简单DP

囧,一开始看错题意,后来才发现人是垂直下落的,被附带链接里的Man Down游戏误导了. 那就变成了一个简单的DAG模型动态规划,随意搞就ok了 #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <set> #include <vector> #include <string> #include <queu

HDU 4791 Alice&#39;s Print Service 简单DP

连接:http://acm.hdu.edu.cn/showproblem.php?pid=4791 题意:打印问题,n次条件,打印量≥si时,每张纸的打印价格为pi(0≤n≤1e5),问打印m次询问,qi张时最少需要多少钱(0≤m≤1e5). 思路:如果对每次询问进行便利复杂度O(m*n)太大,超时.所以进行离线处理,将询问排序,从小到大依次处理,处理过程O(n+m),但排序过程是O(mlogm),所以总体的复杂度还是O(mlogm). 代码: #include <iostream> #inc

(hdu step 3.2.8)命运(简单DP:求从左上角走到右下角的最大值)

题目: 命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1247 Accepted Submission(s): 530   Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知道,

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意:N个数字组成的一条路,每个数字是一个节点顺序连接,起点在第一个数之前,终点在第N个数之后.现让你选择一条路从起点跳到终点,只能往前且跳到比当前点大的那个点,可以认为终点是最大的,可以从起点直接跳到终点但是路的值就是0了,每条路的值为所经过的数字节点的值的和,问你值最大为多少. 解题思路:决策:在当前点i往i~N哪个点跳,反过来当前点i+1可以从1~i哪个点跳过来,那么a[i+1] >

hdu 1203 I NEED A OFFER (0-1背包)

题意分析:0-1背包变形  递推公式:dp[i] = max(dp[i], 1-(1-dp[i-C])*(1-p)) /* I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17860 Accepted Submission(s): 7152 Problem Description Speakless很早就想出国

HDU 1203 I NEED A OFFER (01背包)

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16505    Accepted Submission(s): 6584 Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交

HDU - 1203 I NEED A OFFER!(01背包)

题意:Speakless,给定他所攒的钱n,若干个学校的申请费用和可能拿到offer的概率.求Speakless可能得到至少一份offer的最大概率. 这个问题就和hdu2955差不多,dp里面储存至少一份offer的最大概率,求的时候先转化成拿不到概率相乘,在用1减去. 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=10010; 5 double dp[maxn],value[maxn]; 6 int

hdu 1203 - I NEED A OFFER!(01背包)解题报告

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20129    Accepted Submission(s): 8034 Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要

HDU 2089 不要62(数位简单DP)

不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 42615    Accepted Submission(s): 15587 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可