hdu 4815 Little Tiger vs. Deep Monkey

题意:求老虎不输掉这场比赛概率为p得到的最小分数。

#include<stdio.h>
#include<algorithm>
#include<vector>
#include<iostream>
#include<math.h>
#include<string.h>
#include<queue>
using namespace std;

const int MAXN = 1e5+7;

long long num[MAXN], a[107], N;

int main()
{
    int T;

    scanf("%d", &T);

    while(T--)
    {
        double p;
        int sum = 0;

        scanf("%lld%lf", &N, &p);

        for(int i=1; i<=N; i++)
        {
            scanf("%lld", &a[i]);
            sum += a[i];
        }

        memset(num, 0, sizeof(num));
        num[0] = 1;
        for(int i=1; i<=N; i++)
        {
            for(int j=sum; j>=0; j--)
            {
                if(num[j])
                num[j+a[i]] += num[j];
            }
        }

        double cnt=0, t=0;
        int i;

        for(i=0; i<=sum; i++)
            cnt += num[i];

        for(i=0; i<=sum; i++)
        {
            t += num[i];
            if(t / cnt >= p)
                break;
        }

        printf("%d
", i);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/mengzhong/p/4866328.html