/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
#define ull unsigned long long
#define scf(n) scanf("%d",&n)
#define scfl(n) scanf("%lld",&n)
#define prf(n) printf("%d",n)
#define prfl(n) printf("%lld",n)
#define scfd(n) scanf("%lf",&n)
#define prfd(n) printf("%.lf",n)
#define prf10(n) printf("%.10f",n)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int MAXN = 305;
const int INF = 0x3f3f3f3f;
const int N=5e4+7;
const int maxn=1e5+5;
const double EPS=1e-10;
const double Pi=3.1415926535897;
//inline double max(double a,double b){
// return a>b?a:b;
//}
//inline double min(double a,double b){
// return a<b?a:b;
//}
inline int read() {
int x=0,f=1; char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*f;
}
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
//fastPow
int fastPow(int x,int n){
if(n==1) return x;
int tmp=fastPow(x,n/2); //fenzi
if(n%2==1) return tmp*tmp*x;
else return tmp*tmp;
}
ll gcd(ll m, ll n){return n == 0 ? m : gcd(n, m%n);}
ll lcm(ll m, ll n){return m*n / gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}
//dijsktra
//start
//const int MAX= 10020;
//struct node {
// int x,to,next,w;
// bool operator <(const node &a) const{
// return this->w>a.w;
// }
//}G[MAX<<1];
//int cnt;
//int dis[MAX];
//int vis[MAX];
//int head[MAX];
//
//
//int m,n;
//int b[10020];
//
//
//void add(int u,int v,int w){
// G[++cnt].to=v;
// G[cnt].w=w;
// G[cnt].next=head[u];
// head[u]=cnt;
//}
//int dijkstra(int s){
// mms(dis,INF);
// dis[s]=0;
// priority_queue<node> p;
// node t;
// t.x=s;
// t.w=0;
// p.push(t);
// while (!p.empty()) {
// node u=p.top();
// p.pop();
// int v=u.x;
// if(dis[v]!=u.w) continue;
// for(int i=head[v];i;i=G[i].next){
// int to=G[i].to;
// if(dis[to]>dis[v]+G[i].w){
// dis[to]=dis[v]+G[i].w;
// t.x=to;
// t.w=dis[to];
// p.push(t);
// }
//
// }
// }
// int m1=-1;
// int m2=-1;
// dis[s]=-3;
// for(int i=1;i<=n;i++){
// if(dis[i]==INF) continue;
// if(dis[i]>m1){
// m2=m1;
// m1=dis[i];
// }
// else if(dis[i]>m2){
// m2=dis[i];
// }
// }
// if(m1!=-1&&m2!=-1) return m1+m2;
// return -1;
//
//}
//
//
//int main(){
// int t;
// cin>>t;
// while (t--) {
// cin>>n>>m;
// int u,v,w;
//
// for(int i=1;i<=m;i++){
// cin>>u>>v>>w;
// add(u,v,w);
// add(v,u,w);
// }
// int ans=0;
// int cnt=0;
// for(int i=1;i<=n;i++){
// ans=max(ans,dijkstra(i));
// }
// cout<<ans<<endl;
// }
//}
//end
//e_cheak
//int vis[1000010];
//int prime[100010];
//int e_cheak(int n){ //k为2-n素数的个数
// for(int i=0;i<=n;i++){
// vis[i]=0;
// }
// for(int i=2;i*i<=n;i++){
// if(!vis[i]){
// for(int j=i*i;j<=n;j+=i){
// vis[j]=1;
// }
// }
// }
// int k=0;
// for(int i=2;i<=n;i++){
// if(!vis[i])
// prime[k++]=i; //统计素数
// }
// return k;
//}
//
////进制转化 x转化为y进制
//string work(int x,int y){
// string str="";
// while(x){
// if(x%y>=10) str+=x%y+'A'-10;
// else str+=x%y+'0';
// x/=y;
// }
// reverse(str.begin(),str.end());
// return str;
//}
//
//
//const int MAX=1000005;
//char str[MAX];
//char pattern[MAX];
//int cnt;
//int Next[MAX];
//void getnext(string p,int plen){
// Next[0]=0;
// Next[1]=0;
// for(int i=1;i<plen;i++){
// int j=Next[i];
// while (j&&p[i]!=p[j]) {
// j=Next[j];
// }
// Next[i+1]=(p[i]==p[j])?j+1:0;
// }
//}
//int kmp(string s,string p){
// int last=-1;
// int slen=s.length();
// int plen=p.length();
// getnext(p,plen);
// int j=0;
// for(int i=0;i<slen;i++){
// while (j&&s[i]!=p[j]) {
// j=Next[j];
// }
// if(s[i]==p[j]) j++;
// if(j==plen){
// //start
// return 1;
// //end
// }
// }
// return 0;
//}
//int main(){
// int n;
// cin>>n;
// string t;
// string s="";
// for(int i=2;i<=16;i++){
// s="";
// s+=work(n,i);
// if(kmp(s,t))
// {
// cout<<"yes";
// return 0;
// }
// }
// cout<<"no"<<endl;
// return 0;
//}
//string s1,s2;
//int main(){
// cin>>s1;
// s2="cocacola";
// int ans;
// for(int i=0;i<s1.length();i++){
// if(s1[i]!=s2[i])
// ans++;
// }
// cout<<ceil(ans/2);
//}
//const int MAX=10010;
//
//int n;
//int a[MAX];
//int st[MAX],ed[MAX];
//int pos[MAX];
//int sum[MAX];
//int add[MAX];
////区间修改
//void change(int l,int r,int d){
// int p=pos[l];
// int q=pos[r];
// if(p==q){ //情况1 区间位于一个块里面
// for(int i=l;i<=r;i++){
// a[i]+=d;
// }
// sum[p]+=d*(r-l+1);
// }
// else { //区间跨多个块
// for(int i=p+1;i<=q-1;i++){
// add[i]+=d; //完整的块里面的数据直接加上d
// }
// for(int i=l;i<=ed[p];i++){ //整块前面的散块
// a[i]+=d;
// }
// sum[p]+=d*(ed[p]-l+1);
// for(int i=st[q];i<=r;i++){ //整块后面的散块
// a[i]+=d;
// }
// sum[q]+=d*(r-st[q]+1);
// }
//}
//
//ll query(int l,int r){
// int p=pos[l];
// int q=pos[r];
// ll ans=0;
// if(p==q){ //整块
// for(int i=l;i<=r;i++){
// ans+=a[i];
// }
// ans+=add[p]*(r-l+1);
// }
// else { //有散块
// for(int i=p+1;i<=q-1;i++){
// ans+=sum[i]+add[i]*(ed[i]-st[i]+1); //先处理整块
// }
// for(int i=l;i<=ed[p];i++){ //整合散块
// ans+=a[i];
// }
// ans+=add[p]*(ed[p]-l+1);
// for(int i=st[q];i<=r;i++){
// ans+=a[i];
// }
// ans+=add[q]*(r-st[q]+1);
// }
// return ans;
//}
//
//int main(){
//
//
// cin>>n;
// for(int i=1;i<=n;i++){
// cin>>a[i];
// }
// //start
// int block=sqrt(n);
// int t=n/block;
// if(n%block) t++;
// for(int i=1;i<=t;i++){
// st[i]=(i-1)*block+1;
// ed[i]=i*block;
// }
// ed[t]=n;
// for(int i=1;i<=n;i++){
// pos[i]=(i-1)/block+1; //pos是第i个元素所在的块
// }
//
//
// for(int i=1;i<=t;i++){
// for(int j=st[i];j<=ed[i];j++){
// sum[i]+=a[j]; //sum是第i块的区间和
// }
// }
// //end
//
// int opt,l,r,c;
// for(int i=1;i<=n;i++){
// cin>>opt>>l>>r>>c;
// if(opt==1){
// cout<<query(r,r)<<endl;
// }
// else {
// change(l,r,c);
// }
// }
//}
//
//状态压缩dp
const int MAX=65536+10; //65536是2<<16 防止越界+10
double dp[MAX][100];//dp[I][j]表示手里拥有i张卡片和j枚金币的期望概率
double p[20];
int n,k;
double ans;
int now_have(int x){ //对手中拥有的卡片进行计数
int cnt=0;
over(i,0,n-1)
if(x&(1<<i))
cnt++;
return cnt;
}
int main(){
cin>>n>>k;
dp[0][0]=1;
over(i,0,n-1)
cin>>p[i];
over(i,0,(1<<n)-1){
over(j,0,n*k){
int now1=now_have(i);
int now2=now1+j/k; //手中最多拥有的卡片
if(now2>=n){ //已经满足
ans+=dp[i][j]*(now1+j);
continue;
}
over(k,0,n-1){ //随机抽卡
if(i&(1<<k)) dp[i][j+1]+=dp[i][j]*p[k]; //已经拥有卡片
else dp[i|(1<<k)][j]+=dp[i][j]*p[k]; //没有卡片 加入集合
}
}
}
prf10(ans);
}
相关推荐
西电微机系统课程设计——步进电机开环控制系统设计
西电微机系统课程设计——步进电机开环控制系统设计 一、课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 3.搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50 米,CPU收到水位信号后,根据水位高度控制步进电机(水闸)进行调节。 三、系统功能与设计要求 基本功能要求 手
用优先队列求第K小的数
#include<iostream> #include<cstdio> #include<queue> #include<bitset> #include<cstring> #include<algorithm> #define mod 100000007 using namespace std; typedef long ...
四、zabbix7.0推送告警至钉钉webhook机器人
2、钉钉的webhook是有安全要求的,我采用的是ip的方式,我的zabbix服务器在内网,我的网络出口有多个固定公网ip,所以这样做省事,其他方式也可以你自己考虑。下图是webhook机器人的配置。这一步,参数里面默认的跟我下图里不一样的,按我下图修改。Key是你的webhook机器人地址里的access_token=后面的内容。整个逻辑就是告警动作匹配告警媒介与用户,然后进行告警的发送。1、zabbix服务器能够访问钉钉的服务器,具体说是能访问。二、zabbix7配置报警媒介以及消息模板配置。
1004. Counting Leaves (30)
#include<cstdio> #include<cstring> #include<iostream> #include<sstream> #include<algorithm> #include<cctype> #include<vector> #include<iomanip>
SWIPT技术(无线通信携能技术)的简介与架构——(后续补充无人机SWIPT方向)
SWIPT一、SWIPT(无线通信携能)技术简介1.1、组成:1.2、与传统无线通信的区别:1.3、SWIPT 的集成接收器架构设计1、单独的接收器2、TS架构——时间开关(Time switching,TS)3、PS架构——功率分流(Power splitting,PS)4、天线开关接收器主要两种架构的区别参考文献SWIPT的发展 一、SWIPT(无线通信携能)技术简介 SWIPT(Simultaneous Wireless Information and Power Transfer )是各种WPT技术
港口集装箱码头运营FlexSim仿真
列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。
第k小【优先队列】
题目链接 题目描述 有一个长度为n的数组,值为 a[i], 牛牛想找到数组中第 k 小的数。比如 1 2 2 3 4 6 中,第 3 小的数就是2. 牛牛觉得这个游戏太简单了,想加一点难度,现在牛牛有 m 个操作,每个操作有两种类型。 1 x 1 代表操作一,给数组中加一个元素 x 。(0 ≤ x ≤ 1e9) 2 2 代表操作二,查询第 k 小的数。如果没有 k 个数就输出−1 输入描述: 第一行有三个整数,n m k,(1≤n,m,k≤2e5) 第二行包含 n 个整数 a[i] (
【AI大模型:前沿】44、大模型+机器人:从自动化工具到通用智能体的技术革命与应用全景
大模型与机器人的融合催生了“具身智能体”,突破传统机器人智能化缺失、功能单一等瓶颈。大模型赋予机器人三大能力:常识推理(如热牛奶需去包装)、模糊指令解析(如“整理书桌”拆解步骤)、零样本任务泛化(如搭乐高桥)。技术实现上,通过多模态融合(视觉-语言-动作)、仿真训练(虚拟试错)和实时反馈(动态调整动作)形成闭环。主流框架如Google RT-2(端到端动作生成)、斯坦福Q-Transformer(强化学习优化)和Figure 01(ChatGPT驱动人形机器人)各具优势,可适配工业、家庭等场景。该技术正重塑
力扣剑指offer40.最小k个数-----优先队列解法c++
力扣剑指offer40
机器人视觉联动精度优化:从±2mm到±0.02mm,产线级手眼标定全实战
2025年我接东莞长安Type-C接口分拣项目的时候,就是栽在了手眼标定上:实验室里标定完精度±0.5mm,一到产线直接掉到±2mm,机器人10次有3次抓不住,2000多件Type-C接口直接报废,还撞坏了2套汇川SCARA机器人的吸盘,本来45天的工期拖了3个月,不仅没赚到钱,还倒贴了几万块。手眼标定从来不是简单的跑个demo、算个矩阵就完事了,它是一个系统工程:从硬件选型、安装固定、相机标定、标定流程、算法优化、环境控制、重复验证,每一个环节都会影响最终的联动精度。
YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025
文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。
剑指offer-29 -- 最小的K个数 - C++
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 方法一:排序 直接排序,然后去前k小数据。 时间复杂度:O(nlongn) 空间复杂度:O(1) 方法二:堆排序 建立一个容量为k的大根堆的优先队列。遍历一遍元素,如果队列大小<k,就直接入队,否则,让当前元素与队顶元素相比,如果队顶元素大,则出队,将当前元素入队 代码 class Solution { public: vector<int
基于深度学习的X光安检危险品检测系统(YOLOv8 + UI界面 + 数据集)
随着全球安全形势的变化,机场、车站、地铁等场所的安检工作日益重要。X光安检系统已经成为现代公共安全领域中不可或缺的部分,能够有效地检测物品的内部结构,识别潜在的危险品。然而,传统的X光图像分析方法仍然依赖人工操作,检测效率较低,并且易受到人为因素的影响。近年来,深度学习技术的应用在图像分析领域取得了显著的突破,特别是在目标检测任务中,YOLO(You Only Look Once)模型因其高效性和精度,成为了许多目标检测任务的首选模型。
【AcWing】蓝桥杯集训每日一题Day29|数学期望|DP|4009.收集卡牌(C++)
注意,本题在官网必须保留 10 位小数才能通过(可能是没加SPJ),在本网站无此问题,只要满足你给出的答案与标准答案的绝对误差不超过。因为n很小,只有16,表示有哪些卡牌的时候,可以用一个压缩的状态,用一个5位的01串来表示,01011,分别表示这5张卡牌有没有。对于 100% 的数据,保证 1≤n≤16,1≤k≤5,所有的 pi 满足 pi≥1/10000,且。,pn,用空格分隔。小林会一直抽卡,直至集齐了所有种类的卡牌为止,求她的期望抽卡次数。假设n=5,现在的卡牌有2,4,5,硬币的数量是2。
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
快速排序求第K小数:
else 中利用递归函数,直到有输出结束,注意分成两部分后,其下标合起来是整个数列的下标序列,这是与单纯的快排算法的不同之处。单纯的快排是以基准点为中心分成两部分,然后分别进行再次快排,基准点没有再次参与排序,在该题中要参与。两个嵌套的 while 循环后面的赋值语句实际是起到交换两个数的作用。跳出大的 while 循环后,令 a [ i ] = t ,是为了存储该数。给定一个长度为 n 的整数数列,以及一个整数k,用快速排序求出数列从小到大排序后的第k个数。输出:一个整数,表示数列的第 k 小数。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
C++第k小整数
洛谷P1138 第k小整数
SIMATIC S7-1200, S7-1500 PID 控制[手册]
SIMATIC S7-1200, S7-1500 PID 控制[手册]
第K小整数c++
现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。
<C/C++>输入n个整数,输出其中最小的k个
题目描述 输入n个整数,输出其中最小的k个。 本题有多组输入样例,请使用循环读入,比如while(cin>>)等方式处理 输入描述 第一行输入两个整数n和k 第二行输入一个整数数组 输出描述 输出一个从小到大排序的整数数组 示例1 输入 5 2 1 3 5 7 2 输出 1 2 C++解法: #include <iostream> #include <string> #include <cstring> #include <vecto
【运筹优化】网络最大流问题及三种求解算法详解 + Python代码实现
本文首先对最大流问题进行了介绍,然后分别介绍了三种求解最大流问题的算法Ford-Fulkerson算法、Edmons-Karp算法和 Dinic 算法,并给出了相应的 Python 代码。最后,对这三种算法进行了性能测试与分析。
最大流问题
1 概述 设有向网络N(V,A),V顶点,A是边,其中,Vs是源, Vt 是汇。网络中有通过边aij从源到汇的流,但边流量不超过cij ,问该网络的最大流量为多少? 这个问题,称为最大流问题。它是网络流中最经典的问题之一。最大流问题广泛地应用在交通运输、供水、油管供油、邮电通讯,也可以用在生产安排,管理优化等实际问题上。 2. 求最大流的方法 这里介绍最大流问题有两种解法。一是通过线性规划,
解决寻找第K小元素问题——三种不同的算法实现
个人原创,禁止转载——Zetrue_Li 问题描述:在一个序列里找出第K小元素 以下程序基于函数 int select_kth_smallest(list q, int k) 实现 :返回向量q中第k最小元的函数 算法一: 基于冒泡排序思想,暴力求解: 基本思路:要求找出第k个最小元素,可以通过在序列中遍历k次,每次找出最小的,并放在序列头。类似泡泡一样,找出第k个大的泡泡(bu...
牛客寒假基础训练营5
#牛客寒假基础训练5 ###A:模板 签到题,但是我竟然WA了一次真的十分的伤心,一开始算的字符串中不同的字符个数再加上字符串长度差值,交上去就WA了,后来改成了用最长字符串的长度减去从头开始遍历是字母相同的个数,就AC了,其中原因至今不明。。。。。让我再仔细研究研究 /************************************************* * @Author: map...
C++求无序序列中第k小的元素
C++求无序序列中第k小的元素 利用优先队列(priority_queue)求出一个无序整数列中第k小的元素 先输入序列长度 再输入该整数列 最后输入第k小元素位置 k 实验例子: 5 //序列长度 2 4 3 6 5 //该整数列 2 //第k小元素位置 3 //输出结果 代码如下 #include<queue> #include<iostream> using namespace std; int thk(int *a,int n,int k){ i
第K小整数
如果k>=n,则所求的正整数不在数组内,输出“NO RESULT”,否则输出下标为k-1的元素。先定义一个数组,把n个数先存入数组,然后对数组中的元素进行排序,去重,同时。
C++:求第k小的数
问题:给定n(1<=n<=1000000)个元素,求第k小数(1<=k<=n)。 输入:一组样例。第一行输入两个整数n和k。第二行输入n个不同的int范围内的数。 输出:输出一行,输出第k小数。 样例输入: 5 2 1 5 3 2 4 样例输出: 2 代码: #include<iostream> #include<algorithm> using namespace std; int main() { int num,k; cin&g
使用优先队列实现求第k大或者第k小,前k大,前k小,力扣347题的解决。
给出求前k大的数,前k小的数,第k大的数,第k小的数,力扣347的解决方案。
7524



被折叠的 条评论
为什么被折叠?



