zoukankan      html  css  js  c++  java
  • HDOJ2955 0/1背包的价值和重量

    【hdoj2955】

    1.概率问题;
    计算逃跑率,但是要变成相×的
    2.背包处理问题
    然后因为率不能作为那个重量,所以价值作为重量,求一个在每个价值下的最大的逃跑率,然后在给定的逃跑率下面,来一个sum作为最大的那个价值,最后倒着for一波sum就行了

    #include <stdio.h>
    #include <iostream>
    #include <sstream>
    #include <string.h>
    #include <math.h>
    #include<stdlib.h>
    #include <queue>
    #include <set>*/
    #include <algorithm>
    using namespace std;
    ///dp[i][j]=max(dp[i-1][j-w[i]]+v[i],dp[i-1][j]);
    double dp[10010];
    double max(double a,double b)
    {
        return a>b?a:b;
    }
    int main()
    {
        int T,i,j,sum;
        int w[110];
        double v[110],k;
        int n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lf%d",&k,&n);
            memset(dp,0,sizeof(dp));
            sum=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d%lf",&w[i],&v[i]);
                sum+=w[i];
                v[i]=1-v[i];
            }
            k=1-k;
            dp[0]=1;
            for(i=1;i<=n;i++)
            {
                for(j=sum;j>=w[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-w[i]]*v[i]);
                }
            }
            for(i=sum;i>=0;i--)
            {
                if(dp[i]>=k)
                    break;
            }
            printf("%d
    ",i);
        }
        return 0;
    }
  • 相关阅读:
    面向对象与组合
    异常处理和三级菜单练习
    装饰器和生成器
    序列化模块
    leetcode_498. 对角线遍历
    leetcode_566. 重塑矩阵
    leetcode_59. 螺旋矩阵 II
    leetcode_54. 螺旋矩阵
    leetcode_396. 旋转函数
    leetcode_200. 岛屿数量
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934569.html
Copyright © 2011-2022 走看看