
正文
HDU 4815 Little Tiger vs. Deep Monkey(2013长春现场赛C题)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815
简单的DP题。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
const int MAXN = ;
double dp[][MAXN];
int a[MAXN];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
int T;
double P;
scanf("%d",&T);
while(T--)
{
scanf("%d%lf",&n,&P);
int sum = ;
for(int i = ;i < n;i++)
{
scanf("%d",&a[i]);
sum += a[i];
}
memset(dp,,sizeof(dp));
int now = ;
dp[now][] = ;
for(int i = ;i < n;i++)
{
now ^= ;
memset(dp[now],,sizeof(dp[now]));
for(int j = ;j <= sum;j++)
if(dp[now^][j] > )
{
dp[now][j+a[i]] += 0.5*dp[now^][j];
dp[now][j] += 0.5*dp[now^][j];
}
}
for(int i = ;i <= sum;i++)
dp[now][i] += dp[now][i-];
int ans = ;
for(int i = ;i <= sum;i++)
if(dp[now][i] >= P)
{
ans = i;
break;
}
printf("%d\n",ans);
}
return ;
}






