博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【dp】HDU_2955
阅读量:5051 次
发布时间:2019-06-12

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

这个题目起初是以为只是一个简单的01背包问题

结果发现错了

被抓住的概率是1-被抓住的概率

所以应该换一个dp的思路

f[j]=max(f[j],f[j-q[i].money]*q[i].v)   其中,f[j]表示抢j块大洋的最大的逃脱概率,条件是f[j-q[i].money]可达,也就是之前抢劫过;

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
#include
#include
typedef struct {
int money; double v; }Bank; Bank bank[110]; int t,n; double p; double dp[10010]; double max(double a,double b) {
if(a>b) return a; else return b; } int main() {
int i,j,sum; scanf("%d",&t); while(t--) {
scanf("%lf%d",&p,&n); for(i=1,sum=0;i<=n;i++) {
scanf("%d%lf",&bank[i].money,&bank[i].v); sum+=bank[i].money; } memset(dp,0,sizeof(dp)); dp[0]=1; for(i=1;i<=n;i++) {
for(j=sum;j>=bank[i].money;j--) dp[j]=max(dp[j],dp[j-bank[i].money]*(1-bank[i].v));//dp[j]是逃跑率 } for(i=sum;i>=0;i--) {
if(dp[i]>=(1-p))//求最大的能偷到的数目 {
printf("%d\n",i); break; } } } return 0; }

转载于:https://www.cnblogs.com/zuckerTT/archive/2011/09/24/2189789.html

你可能感兴趣的文章
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>
Android中使用ListView实现下拉刷新和上拉加载功能
查看>>
proc文件系统的简介
查看>>
连续自然数和
查看>>
[SDOI2015]星际战争
查看>>
用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
查看>>
JS控制页面跳转
查看>>
Ubuntu PPA软件源
查看>>
Window 2003 IIS + MySQL + PHP + Zend 环境配置
查看>>
Mysql集合笔记
查看>>
HTTPS与SSL数字证书的必要性
查看>>
react之项目目录
查看>>