2015 TCO Round 2B Easy - Bitwisdom

問題


http://community.topcoder.com/stat?c=problem_statement&pm=13778&rd=16500

解き方


dpで解く。
dp[現在の位置][現在が1か0か][1が最初から連続しているかのフラグ]とする。

現在のビット0になったとき、
1が最初から連続していれば1回の操作が必要で、
連続していなければ2回の操作が必要になる。

#英出張中で出れなかったが、日本だと出場しやすい時間だったので出たかった…

コード


class Bitwisdom {

public: double expectedActions(vector<int> p) {
int n=p.size();
double dp[301][2][2];

memset(dp,0,sizeof(dp));
double ret=0;

dp[0][0][0]=(100-p[0])*0.01;
dp[0][1][1]=p[0]*0.01;

for(int i=1;i<n;i++){
ret+=dp[i-1][1][0]*(100-p[i])*0.02;
ret+=dp[i-1][1][1]*(100-p[i])*0.01;

dp[i][0][0]+=dp[i-1][0][0]*(100-p[i])*0.01;
dp[i][0][0]+=dp[i-1][1][0]*(100-p[i])*0.01;
dp[i][0][0]+=dp[i-1][1][1]*(100-p[i])*0.01;

dp[i][1][0]+=dp[i-1][0][0]*p[i]*0.01;
dp[i][1][0]+=dp[i-1][1][0]*p[i]*0.01;

dp[i][1][1]+=dp[i-1][1][1]*p[i]*0.01;
}
ret+=dp[n-1][1][1]+dp[n-1][1][0];

return ret;
}

};

Share this

Related Posts

Previous
Next Post »