博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1203
阅读量:6721 次
发布时间:2019-06-25

本文共 1253 字,大约阅读时间需要 4 分钟。

  hot3.png

15103754_tcI6.gif
15103754_rEXI.gif View Code
 
// 从反面考虑:就是一个offer都没获得,最后结果p=1-p;
#include " iostream "
#include
" algorithm "
using namespace std;
struct offer
{
int a;
double b;
}s[
10000 ];
int cmp(offer x, offer y)
{
return x.b > y.b;
}
int main()
{
int n,m;
int i;
while (cin >> n >> m,n + m)
{
for (i = 0 ;i < m;i ++ )
scanf(
" %d %lf " , & s[i].a, & s[i].b);
sort(s,s
+ m,cmp);
int sum = 0 ;
double p = 1.0 ;
for (i = 0 ;i < m;i ++ )
{
if (s[i].a + sum <= n)
{
sum
+= s[i].a;
p
*= ( 1 - s[i].b);
}
}
p
= ( 1 - p) * 100 ;
printf(
" %.1lf%%\n " ,p);
}
return 0 ;
}

这题有漏洞啊!应该是属于背包问题,贪心也不可能这么容易过啊!

不多解释,看错误的一种情况:

sample:

>10  4

>5 0.4

>4  0.3

>3  0.2

>2  0.2

很明显 P2+P3=0.4>P4=0.3

而运行结果为:58.0%

正确结果:61.6%

所以此题还是选择背包算法求解好!

15103754_tcI6.gif
15103754_rEXI.gif View Code
 
#include " iostream "
using namespace std;
double dp[ 100001 ];
struct node
{
int a;
double b;
}s[
1001 ];
double Max( double a , double b)
{
return a > b ? a:b;
}
int main()
{
int n,m;
int i,j;
while (cin >> n >> m,n + m)
{
for (i = 0 ;i < m;i ++ ) scanf( " %d %lf " , & s[i].a, & s[i].b);
memset(dp,
0.0 , sizeof (dp));
for (i = 0 ;i < m;i ++ )
{
for (j = n;j >= s[i].a;j -- )
{
dp[j]
= Max(dp[j] , 1 - ( 1 - dp[j - s[i].a]) * ( 1 - s[i].b));
}
}
double p = dp[n] * 100 ;
printf(
" %.1lf%%\n " ,p);
}
return 0 ;
}

转载于:https://my.oschina.net/garyun/blog/602884

你可能感兴趣的文章
Ascll、GB2312、Ansi
查看>>
ubuntu ftp 服务器搭建
查看>>
2.1、Android Studio通过Lint提升你的代码
查看>>
魔域深渊
查看>>
ffmpeg 去除图片中的水印
查看>>
将博客搬至CSDN
查看>>
Java线程创建形式 Thread构造详解 多线程中篇(五)
查看>>
Hexo博客系列(二)-在多台机器上利用Hexo发布博客
查看>>
C语言参考程序—无符号一位整数的四则运算
查看>>
逻辑电路 - 与门And Gate
查看>>
win server 挂载
查看>>
PSR-2 编码风格规范
查看>>
Linux上Java的安装与配置
查看>>
Laravel使用Carbon人性化显示时间
查看>>
我的友情链接
查看>>
SQL 2008 R2安装部署及端口开放
查看>>
oracle 日期函数总结
查看>>
11.11即将到来,华为云学院精品课程免费推荐奉上
查看>>
MAC OS 密码忘记 重置方法
查看>>
GNS3中支持的模块
查看>>