hdu 1203 I NEED A OFFER!

来源:互联网 发布:钢铁雄心4 知乎 编辑:程序博客网 时间:2024/05/16 10:54

        hdu 1203 I NEED A OFFER!

        01背包.

        题目中要求求出至少拿到一个offer的概率, 这样不好求, 那就求它的对立面, 即 拿不到任何一个offer的最小概率, 这样就可以转为01背包了.

#include <stdio.h>#define MAX 10005double dp[MAX], p[MAX];int w[MAX];inline double min(double a, double b) {return a > b ? b : a;}int main() {int n, v;int i, j;while (scanf("%d%d", &v, &n) == 2 && v || n) {for (i = 0; i < MAX; i++) {dp[i] = 1;}for (i = 1; i <= n; i++) {scanf("%d%lf", &w[i], &p[i]);}for (i = 1; i <= n; i++) {for (j = v; j >= w[i]; j--) {dp[j] = min(dp[j], dp[j - w[i]]*(1 - p[i]));}}printf("%.1lf%%\n", (1-dp[v])*100);}return 0;}



原创粉丝点击