题意:求老虎不输掉这场比赛概率为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; }