您的位置:首页 > 其它

2017.8.10 奖励关 思考记录

2017-08-11 07:23 162 查看
     

      %%ISA   的 期望算法、

      首先期望不是单独的一个东西,他后面必须加上一个东西(如期望步数、期望分数、期望个数)

       那么期望XX  就是进行无穷次   出现的各个XX趋向于的一个值,,所以也叫平均XX

      这个题看上去很复杂、好像很难一脸不可做、、

      其实把他分成状压+数塔+取平均,那每个都很直接了

       n=15的范围明显是要你状压

       然后就是从后往前取了,这样每个状态最后是多少分也就明了了

       所以每次取最优的时候直接判断取和不取那个的后效值更高即可

       由期望的公式可以算出、

       (如果有环就需要列方程高斯消元)

码:

#include<iostream>
#include<cstdio>
using namespace std;
int i,j,k,y,xq[105],er[105],n,K,v[105],x;
double f[105][100010];
int main()
{
scanf("%d%d",&K,&n);
er[0]=1;
for(i=1;i<=20;i++)er[i]=er[i-1]<<1;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
v[i]=x;
while(y!=0)
{
xq[i]+=er[y-1];
scanf("%d",&y);
}
}
for(i=K;i>=1;i--)
for(j=0;j<=er
-1;j++)
{
for(k=1;k<=n;k++)
{
if((j&xq[k])==xq[k])f[i][j]+=max(f[i+1][j],f[i+1][j|er[k-1]]+v[k]);
else f[i][j]+=f[i+1][j];
}
f[i][j]/=n;
//cout<<f[i][j]<<endl;
}
printf("%.6lf",f[1][0]);
}


    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: