V
来源:互联网 发布:数据库地址 编辑:程序博客网 时间:2024/03/29 05:59
30.04 31 0.022 0.033 0.050.06 32 0.032 0.033 0.050.10 31 0.032 0.023 0.05
246
题目大意:求一个奇葩小偷能偷到的最大的钱给你他被抓的概率和最大的被抓概率
思路:0 1背包,但是问题是没法存的是答案。。概率问题。被抓概率是p那不被抓就是1-pso要都不被抓药用乘法原理是(1-p1)*(1-p2)这个概率是不被抓那被抓的是1-刚刚概率 所以被抓小于p 所以被抓的要小于刚刚的概率。这就比较奇葩了需要存概率。。于是我就换了个想法把概率当做价值求出所有的概率最后比较概率满足条件的输出钱
还有个奇葩地方。。写完后超时,我把所有c++输入输出换成c还是超时。。后来百度下发现这个题大多都是running time 因为钱很多所以不能用105然后我该了数组长度后
超时解决了。。真心搞不懂oj的检查机制太奇葩了。
代码:#include<iostream>#include<stdio.h>#include<string.h>using namespace std;struct node { int money; double runp; }bank[105]; double dp[10005];int main(){ int t; scanf("%d",&t); while (t--) { int maxmoney=0; double p; int n; scanf("%lf %d",&p,&n); p=1-p; for(int i=0;i<n;i++) { scanf("%d %lf",&bank[i].money,&bank[i].runp); bank[i].runp=1-bank[i].runp; maxmoney+=bank[i].money; } memset(dp,0,sizeof(dp)); dp[0]=1.0; for(int i=0;i<n;i++){ for(int j=maxmoney;j>=bank[i].money;j--) dp[j]=max(dp[j-bank[i].money]*bank[i].runp,dp[j]); } for(int i=maxmoney;i>=0;i--) { if(dp[i]>p) { printf("%d\n",i); break; } }} return 0; }
- V
- v
- v
- v
- v
- v
- V
- V
- V
- V
- V
- V
- v
- V
- V
- V
- v
- V
- type命令及Linux命令类型
- MVP安卓开发模式
- 提高下载网速
- Android 自定义View (一)
- Codeforces Round #319 (Div. 2) B Modulo Sum
- V
- scala学习之Map、Tuple、zip
- 第四届河南省程序设计大赛
- Codeforces Round #319 (Div. 2)E Points on Plane
- LeetCode:Letter Combinations of a Phone Number
- 调整基于HAAR特征的AdaBoost级联分类器的物体识别的参数
- 解决python画图标签中文乱码
- Android购物车初步实现2(功能篇)
- CentOS系统配置.ssh遇到port 22:No route to host问题的解决方法