• HDU 1203 I NEED A OFFER!


    此题一定要注意输入是 n || m 不是 n&&m,  就因为这个WA了几次

    此题是01背包的增加型,不要完全套01背包,由于是概率所以要考虑乘法,题目要求的是至少被录取,根据概率论,求其反面简单

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <cstring>
     6 
     7 using namespace std;
     8 
     9 int main(){
    10     int n,m;
    11     while(cin >> n >> m && (n || m)){
    12         vector<int> cost(m);
    13         vector<double> prob(m);
    14         for(int i= 0 ; i < m ; i ++ ) cin >>cost[i]>>prob[i];
    15         vector<double> dp(n+1,1.0);
    16         for(int i = 0 ; i < m; i ++ ){
    17             for(int j = n; j >= cost[i]; j -- ){
    18                 dp[j] = min(dp[j] , dp[ j - cost[i] ]*(1.0- prob[i]) );
    19             }
    20         }
    21         printf("%.1lf%%\n",(1-dp[n])*100);
    22     }
    23     return 0;
    24 }

    注意memset只能将数组初始化 0或 -1,不能用于初始化话其它值,如果想将数组初始化可以利用

      fill ( dp, dp+n, 1);

  • 相关阅读:
    使用docker 创建SSL 证书
    定时任务知识清单列表
    Spring Tool Suite介绍
    常用的正则表达式
    MD5加密--项目案例
    MD5加密简单使用
    啥是MD5?
    SpringBoot整合Redis
    StringRedisTemplate操作redis数据
    013-- mysql常用的查询优化方法
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3011105.html
Copyright © 2020-2023  润新知