南邮 OJ 1860 C. 保研

C. 保研

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 178            测试通过 : 44 

比赛描述

    对于一些名校而言,保研不仅可以由学校推免,也可以由学生自己向希望保研的学校提出申请,这个过程有点类似于外国学生向学校提交简历等待Offer的过程。但是,投递申请需要亲自去相应学校的研招办递交材料,这就需要一些成本(比如路费等),且每个院校都有自己的录取成功率。现在,请在总成本不超过限制的情况下,求出最大的成功率。

输入

    输入包含多行。
    第一行包含两个正整数C和N,表示成本限额和N个学校。
    接下来N行,每行包含一个正整数c和一个浮点小数w,分别表示向该学校投递材料所需要消耗的成本和成功率。

输出

    仅输出一行结果,包含一个小数点后保留4位的百分小数(有%),表示最大成功率。

样例输入

10 3
4 0.1
4 0.2
5 0.3

样例输出

44.0000%

题目来源

ACM爱好者协会





// 18MS

#include<iostream>

#define MAX_N 10001
int c[MAX_N];
float w[MAX_N];
float dp[MAX_N];

int main(){
	int C,N,i,j;
	float r;
	while(scanf("%d%d",&C,&N)==2){
		for(i=0;i<N;i++){
			scanf("%d%f",c+i,&r);
			w[i] = 1.0-r;
		}
		for(j=0;j<=C;j++){
			dp[j] = 1.0;
		}
		for(i=0;i<N;i++){
			for(j=C;j>=c[i];j--){
				if(dp[j] > (r=dp[j-c[i]]*w[i]) ){
					dp[j] = r;
				}
			}
		}
		printf("%.4f%%\n",100.0-dp[C-1]*100);
	}
}


你可能感兴趣的:(ACM,C.,保研,南邮OJ)