程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 2955 Robberies (轉化概率-01背包)

HDU 2955 Robberies (轉化概率-01背包)

編輯:C++入門知識

HDU 2955 Robberies (轉化概率-01背包)


 

代碼:

 

/*
* Problem: HDU No.2955
* Running time: 46MS
* Complier: G++
* Author: ACM_herongwei
* Create Time: 15:01 2015/9/9 星期三
* zeroonebags
* 用成功逃走的概率當做價值!銀行的總錢數當做背包容量!單個銀行的錢數體積,然後zeronebags
*/
#include 
#include 
#include 
#include 
#define CLR(c,v) (memset(c,v,sizeof(c)))
using namespace std;

template 
inline _T Max(_T a,_T b){
    return (a>b)?(a):(b);
}
template 
inline _T Maxx(_T a,_T b,_T c){
    return (a>Max(b,c))?(a):(Max(b,c));
}
const int N  = 1e4+ 10;

double dp[N];
int volume[N];
double p_value[N];

int main()
{
    int Ncase;
    scanf(%d,&Ncase);
    while(Ncase--)
    {
        CLR(dp,0);
        CLR(volume,0);
        CLR(p_value,0);
        double P;
        int n_banks;
        int sum_v=0;
        scanf(%lf %d,&P,&n_banks);
        P=1.0-P;                      // 逃走的概率
        for(int i=0; i=volume[i]; --j)
            {
                if(dp[j]<=dp[j-volume[i]]*p_value[i]) //注意是相乘!
                {
                    dp[j]=dp[j-volume[i]]*p_value[i];
                }
            }
        }
        int i;
        for(i=sum_v; i>=0; --i) //從總價值往前計算,判斷相應的概率
        {
            if(dp[i]>=P)
            {
                break;
            }
        }
        printf(%d
,i);
    }
    return 0;
}
/*
sample input
3
0.04 3
1 0.02
2 0.03
3 0.05
0.06 3
2 0.03
2 0.03
3 0.05
0.10 3
1 0.03
2 0.02
3 0.05
sample ouput
2
4
6
*/


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved