hdoj2955

本文介绍了一种基于背包问题的概率求解方法,通过输入银行数量、成功概率等参数,利用动态规划算法计算出达到一定成功概率下的最小背包容量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以价值总数为背包重量,以银行数量为物品数 ,成功概率为总价值构建背包

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<map>
#include<stack>
#include<time.h>
#include <memory.h>
int mo[1100],sum;
double p1[1100],can[10010];
int main()
{
  int i,j,t,n,k;
  double p;
    scanf("%d",&t);
  for(i=0;i<t;i++)
  {
     sum=0;
     scanf("%lf %d",&p,&n);
     for(j=1;j<=n;j++)
     {
        scanf("%d %lf",&mo[j],&p1[j]);
        sum+=mo[j];
        p1[j]=1-p1[j];
      }
       memset(can,0,(sum+1)*4);
       can[0]=1;
     for(j=1;j<=n;j++)
       for(k=sum;k>=mo[j];k--)
       {
         can[k]=can[k]>can[k-mo[j]]*p1[j]?can[k]:can[k-mo[j]]*p1[j];
       }
     for(j=sum;j>=0;j--)
     {
        if(1-can[j]<=p){printf("%d\n",j);break;}
     }
  }       
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值