题解 | #[SCOI2008]奖励关#

[SCOI2008]奖励关

https://ac.nowcoder.com/acm/problem/20263

倒着推导

f[i][st]+=((pre[j]&st)==pre[j]?max(f[i+1][st],f[i+1][st(1<<j)]+score[j]):f[i+1][st])/k;f[i][st] += ((pre[j] \& st)==pre[j]?max(f[i+1][st],f[i+1][st|(1<<j)]+score[j]):f[i+1][st])/k;

pre[]为预处理的满足条件的数组,k表示有k类物品

#include<bits/stdc++.h>
using namespace std;

const int N = 16;

int n,k,score[N],pre[N];
double f[110][1<<N];
/*f[i][st]表示前i关状态为st的最大值*/
void solve(){
    for(int i = n ; i >= 1 ; i --){
        for(int st = 0; st <= (1 << k)-1 ; st ++){
            for(int j = 0 ; j< k; j ++){
                if((pre[j] & st) == pre[j])
                    f[i][st] += 1.0*max(f[i+1][st] , f[i+1][st|( 1 << j)] + score[j])/k;
                else
                    f[i][st] += 1.0*f[i+1][st]/k;
            }
        }
    }
    cout <<fixed << setprecision(6) << f[1][0] << endl;
}

int main(){
    cin >> n >> k;
    for(int i = 0; i < k ; i++)
    {
        cin >> score[i];
        int p; cin >> p;
        while(p){
            pre[i] |= (1<<p-1);
            cin >> p;
        }
    }
    solve();
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
hwwhwh:同双非,有大厂实习其实也没啥用,主要看运气,等就行了
点赞 评论 收藏
分享
rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务