LIghtOJ1038---Race to 1 Again【期望dp】
阿新 • • 發佈:2018-12-15
題意:一個整數n每次除以他的因子求除以到1時的期望次數。
t=10000,100000>=n>=1肯定要打表的。
dp【50】=(dp【1】+dp【2】+dp【5】+dp【10】+dp【25】+dp【50】)/6+1。1是貢獻的次數1。
按這個方程打表即可。
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; double dp[100006];int w[10000]; int main() { dp[1]=0; for(int i=2;i<=100000;i++) { double w=0,e=0; for(int j=1;j*j<=i;j++) { if(i%j!=0) continue; else { if(j*j!=i) { e+=2;w+=dp[j]+dp[i/j]; } else { e++;w+=dp[j]; } } } dp[i]=(w+e)/(e-1); } int t; cin>>t;int o=0; while(t--) { int n; cin>>n; printf("Case %d: ",++o); printf("%lf\n",dp[n]); } return 0; }