题目链接 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): 20561 Accepted Submission(s): 8206
后面的m行,每行都有两个数据ai(整型),bi(实型)分别表示第i个学校的申请费用和可能拿到offer的概率。
输入的最后有两个0。
10 3 4 0.1 4 0.2 5 0.3 0 0
44.0%HintYou should use printf("%%") to print a '%'.
和 HDU 2955 Robberies 差不多,链接 http://blog.youkuaiyun.com/chenninggo/article/details/48064699
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n, m;
typedef struct node
{
int val;
double b;
};
node nod[10010];
double dp[10010];
int main()
{
// freopen("input.txt", "r", stdin);
while (~scanf("%d%d", &n, &m),n||m)
{
for (int i = 1; i <= m; i++)
scanf("%d%lf", &nod[i].val, &nod[i].b);
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= m; i++)
for (int j = n; j >= nod[i].val; j--)
dp[j] = max(dp[j], 1 - (1 - dp[j - nod[i].val]) * (1 - nod[i].b));
/*double mx = dp[1] * 100; 这里不是很明白,用mx取最大值输出,一直过不了。用dp[n]*100输出就过了,一直没有搞懂,有大牛知道为什么一定要告诉我啊T.T
for (int i = 1; i <= n; i++)
if (mx < dp[i] * 100)
mx = dp[i] * 100;
printf("%.1lf%%\n", mx);*/
printf("%.1lf%%\n", dp[n] * 100);
}
return 0;
}
444



被折叠的 条评论
为什么被折叠?



