題目大意:給定n個事件,第i個事件發生的概率為pi,收益為ai,初始收益為k,求n個事件之後發生的事件數>=l且收益>=0的概率
令f[i][j][k]表示第i個事件進行後已經發生了j個事件且當前受益為k的概率
MB破輸入法打兩行字錯了十多遍
第三維好大- - 不會爆?
實際上第三維大於n就沒有意義了 因為收益大於n時一定不會扣到負數 因此將第三維大於n的狀態全都存到n上即可
時間復雜度O(n^3)
卡內存差評
#include#include #include #include #define M 201 using namespace std; int n,l,k; int score[M]; double possibility[M],ans; class abcd{ private: double mempool[M<<1]; public: double& operator [] (int x) { if(x>=n) x=n; if(x<=-n) x=-n; return mempool[x+200]; } }f[M][M]; //f[i][j][k]表示第i個點時贏了j場得分為k的概率 int main() { int i,j,k,x; cin>>n>>l>>::k; for(i=1;i<=n;i++) { scanf("%d",&x); possibility[i]=x/100.0; } for(i=1;i<=n;i++) scanf("%d",&score[i]); f[0][0][::k]=1; for(i=0;i