Codeforces Round #363 (Div. 1) C LRU 概率dp

本文介绍了一种基于动态规划的方法来解决缓存替换策略中元素出现概率的问题。通过将问题转换为从后向前考虑元素进入缓存的过程,避免了直接处理元素移出缓存的复杂性。该方法使用位操作和概率论来高效地计算每个元素出现在包含特定数量元素的缓存中的概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这里写图片描述
法一(cf上的题解):把问题倒过来想。假设从最晚访问的元素开始向前加元素,加到k个为止。求第i个出现的概率。这样就不同考虑从缓存区有文件出来了。 
将20个元素压位,dp[mask]记录mask状态(由 0/1 表示的状态)出现的可能性。当1<< i在mask中为0,也就是第i个元素没有出现过时,dp[mask]可以转移到dp[mask+(1<< i)],表示第i个元素在mask中所有已存在元素之前加入,转移时要乘上概率p(i)/(p(i)+p(x)),其中p(x)是除了mask中元素和i元素的其他元素出现的概率,这个式子的含义是在除了已经在mask中出现的元素中,i第一个出现,所以用i的概率除以还没被选入mask中元素的概率和。最后答案只要统计一下有k个元素且第i个元素存在的状态的概率和。 
要注意的是如果有概率为0的要直接去掉,因为这个元素根本不能进缓存,如果没有去掉,答案肯定是会出问题的。而且去掉这些元素后,要保证k<=n。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>

using namespace std;
int n,k;
double a[25];
double dp[(1<<20)+10];
double ans[25];
int main()
{
    //cout<<()<<endl;
    while(~scanf("%d%d",&n,&k))
    {
        for(int i=0;i<n;i++)
            scanf("%lf",&a[i]);

        int z=0;
        for(int i=0;i<n;i++)
            if(a[i]<1e-10)
                z++;

        k=min(k,n-z);

        memset(dp,0,sizeof(dp));
        memset(ans,0,sizeof(ans));

        int len=(1<<n);
        dp[0]=1;

        for(int i=0;i<len;i++)
        {
            double sum=0;
            int f=1;
            for(int j=0;j<n;j++)
            {
                if((i&(1<<j))==0)
                {
                    sum+=a[j];
                }
                if((i&(1<<j))!=0 && a[j]==0)
                {
                    f=0;
                }
            }

            if(f==0)
            {
                continue;
            }
            int ct=0;
            for(int j=0;j<n;j++)
            {
                if((i&(1<<j))!=0)
                {
                    ct++;
                    dp[i]+=(dp[i-(1<<j)]*(a[j])/(a[j]+sum));

                }
            }

            if(ct==k)
            {
                for(int j=0;j<n;j++)
                {
                    if((i&(1<<j))!=0)
                    {
                        ans[j]+=dp[i];
                    }
                }
            }

        }

        for(int i=0;i<n;i++)
        {
            printf("%.8f ",ans[i]);
        }
        printf("\n");
    }
}

 

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
标题基于Django+Vue的双相情感障碍交流平台研究AI更换标题第1章引言介绍双相情感障碍交流平台的背景、意义、研究现状以及论文的研究方法和创新点。1.1研究背景与意义阐述双相情感障碍交流平台的重要性和实际需求。1.2国内外研究现状分析国内外在双相情感障碍交流平台方面的研究进展。1.3研究方法与创新点介绍论文采用的研究方法和平台的创新之处。第2章相关理论技术介绍Django、Vue以及双相情感障碍相关理论知识。2.1Django框架概述简述Django框架的特点、优势及其在Web开发中的应用。2.2Vue框架概述阐述Vue框架的核心思想、特点及其在前端开发中的应用。2.3双相情感障碍理论知识介绍双相情感障碍的基本概念、症状表现及其治疗方法。第3章平台需求分析与设计详细分析用户需求,设计双相情感障碍交流平台的整体架构和功能模块。3.1用户需求分析通过调研了解用户需求,为平台设计提供参考。3.2平台整体架构设计根据用户需求,设计平台的整体架构和技术路线。3.3功能模块设计详细介绍平台各个功能模块的设计思路和实现方法。第4章平台实现与测试阐述双相情感障碍交流平台的实现过程,包括前端和后端的实现,以及平台的测试。4.1前端实现利用Vue框架实现平台的前端界面和交互功能。4.2后端实现采用Django框架实现平台的后端逻辑和数据处理功能。4.3平台测试与优化对平台进行全面测试,发现并解决潜在问题,优化平台性能。第5章平台应用与评价将双相情感障碍交流平台应用于实际场景,并对其进行综合评价。5.1平台应用情况介绍平台在实际应用中的情况,包括用户反馈和使用效果。5.2平台评价指标与方法确定平台的评价指标和方法,对平台进行全面评估。5.3评价结果与分析根据评价指标和方法,得出平台的评价结果,并进行详细分析。第6章结论与展望总结论文的研究成果,分析双相情感障碍交流平台的优缺点,并展望未来的研
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值