/*题目大意:有n个问题,,告诉你答对该题能得多少分,其中一个人随机答题,问另一个人不输的概率为p至少需要答多多少分对于样例:3 0.51 2 3分析:分数 0 1 2 3 3 4 5 6次数 1 1 1 2 1 1 1 1位置 1 2 3 4 5 6 7 8不输的概率为0.5 那么对应的位置为0.5*2^n=0.5*8=5因此对应的分数是3*/#include#include #include using namespace std;#define LL long long#define MAX 40000+5int n,a[MAX];double p;int dp[MAX];//dp[i]代表分数i出现的次数int main(){ freopen("in.txt","r",stdin); int T; cin>>T; while(T--) { scanf("%d%lf",&n,&p); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dp[0]=1; for(int i=1;i<=n;i++) for(int j=MAX;j>=a[i];j--)//从大到小,不然就重复更新了,因为是用小的更新大的 dp[j] += dp[j-a[i]]; LL sum = 1LL< =cnt) { printf("%d\n",j); break; } } } return 0;}