1,日常看懂题不知道咋做。
2,日了这东西学不下去了
这简直太难了,我看不出来啊。。除非背代码。。
memset(prv,0,sizeof(double)*(n+1));
而且这个地方不知道为什么总是不行。
因为你要用的是
#include<string.h>
3,搞得才把第一遍弄出来
#include<iostream> #include<algorithm> #include<string.h> typedef long long ll; using namespace std; int M,X; double P; double dp[2][1000005]; int main(){ cin>>M>>P>>X; int n=1<<M; double *prv=dp[0]; double *nxt=dp[1]; memset(prv,0,sizeof(double)*(n+1)); prv[n]=1.0; for(int r=0;r<M;r++) { for(int i=0;i<=n;i++) { int jub=min(i,n-i); double t=0.0; for(int j=0;j<=jub;j++) { t=max(t,P*prv[i+j]+(1-P)*prv[i-j]); } nxt[i]=t; } swap(prv,nxt); } int i=(ll)X*n/1000000; printf("%.6f ",prv[i]); }
你忘了当时dp就没咋学啊。。。