HDU 2955 01背包
来源:互联网 发布:js在线格式化 编辑:程序博客网 时间:2024/04/29 23:06
题目点我
题目大意:给了
思路:01背包问题,一开始想把概率取对数做背包容量,发现行不通。要用收益当背包容量,用安全概率当作背包价值。状态转移方程如下:
其中
这道题的背包要恰好装满,所以开始要把
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define INF -1#define MAX 10010#define NUM 105double dp[MAX];double max(double a, double b){ return a > b ? a : b;}void ZeroOnePack(double *f, int cost, double p, int vol){ for(int i = vol; i >= cost; i--) f[i] = max(f[i], f[i - cost] * (1 - p));}int main(){ int T, N, i, M[NUM], MaxM = 0; double P[NUM], Psafe; scanf("%d", &T); while(T--){ scanf("%lf %d", &Psafe, &N); for(i = 0; i < N; i++){ scanf("%d %lf", &M[i], &P[i]); MaxM = MaxM > M[i] ? MaxM : M[i]; } for(i = 1; i < N * MaxM; i++) dp[i] = INF; dp[0] = 1; //没抢钱的安全概率 = 1 for(i = 0; i < N; i++) ZeroOnePack(dp, M[i], P[i], N * MaxM); for(i = N * MaxM; i >= 0; i--){ if(dp[i] >= (1 - Psafe)){ printf("%d\n", i); break; } } memset(dp, 0, sizeof(double)*MAX); } return 0;}
0 0
- hdu 2955 01背包
- HDU 2955 01背包
- HDU 2955 01背包
- HDU 2955 01背包
- hdu 2955 01背包
- HDU-2955 01背包
- 背包入门 01背包 hdu 2955 Robberies
- hdu 2955 01背包问题
- hdu 2955 01 背包 Robberies
- hdu 2955 Robberies--01背包
- Hdu 2955 Robberies//01背包
- hdu 2955 Robberies (01背包)
- hdu 2955 Robberies 01背包
- hdu 2955(01 背包)
- hdu 2955 (dp 01背包)
- HDU 2955 Robberies(01背包)
- HDU 2955 Robberies (01背包)
- hdu 2955 Robberies(01背包)
- 置换过时sizeWithFont:在iOS的7
- SQL Server 2012 链接本地服务器失败
- apache虚拟主机配置
- WCF 设计和实现服务协定(01)
- C#面试题整理2
- HDU 2955 01背包
- 自定义tabBar(适用于有选中图片随着移动的情况)
- oracle 10g 各版本下载地址
- vps简单测试命令收藏
- centos 6.5 NVIDIA GPU caffe 配置
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第五讲:无序列表、有序列表、框架
- python脚本语言2
- 利用反射技术实现POJO的数据库操作
- 【Android Studio快捷键】之导入相应包声明