当前位置: 首页 > news >正文

seo网站推广优化公司/搜索引擎平台有哪些

seo网站推广优化公司,搜索引擎平台有哪些,贵阳网站建开发,微信公众平台公众号题目 题目大意 给你一棵树,这棵树上的所有叶子节点的权值是随机的排列。 两个人博弈,从根开始,轮流往下走。 先手希望权值最大,后手希望权值最小。 问期望的最终结果。 思考历程 这场比赛实在是太丧心病狂了!两个期望…

题目

在这里插入图片描述

题目大意

给你一棵树,这棵树上的所有叶子节点的权值是随机的排列
两个人博弈,从根开始,轮流往下走。
先手希望权值最大,后手希望权值最小。
期望的最终结果。


思考历程

这场比赛实在是太丧心病狂了!两个期望题,有没有人性啊!
还是那种特别变态的期望……
想了好久,没有想出来……
于是打暴力:
枚举所有的排列,然后用DP计算答案。
如果喜欢,DP可以加上alpha-beta剪枝……当然我没加,因为在这题里面没有什么意义。
分数还给的挺大方的,30分。


正解

首先推个式子:
E(x)=∑xP(x=ans)=∑P(x≤ans)E(x)\\=\sum xP(x=ans) \\=\sum P(x \leq ans)E(x)=xP(x=ans)=P(xans)
后面这个是什么鬼?
我们将第二个式子拆开,对于xxx,它贡献了xxxP(ans=x)P(ans=x)P(ans=x)
看看第三个式子,对于x′≤xx'\leq xxx,它就可以加上xxx的贡献。这样的x′x'xxxx个,所以这是成立的。

接下来就是一个很巧妙的转化:
我们设结果为xxx,将大于xxx的记作111,将小于等于xxx的记作000
这样就大大地简化了题目,因为我们只需要关心它的结果是否为111,而不需要关心结果是否恰好为xxx
然后就是树形DP:设fi,j,0/1f_{i,j,0/1}fi,j,0/1表示点iii为根的子树中,叶子节点的权值为000的个数是jjj,点iii的值为000111(从下面转移上来的值)的方案数。
方程就不用说了吧……自己推。
这就是一个树上背包问题。
至于最终的答案,枚举xxx,它的贡献就是f1,x,1Cmx\frac{f_{1,x,1}}{C_m^x}Cmxf1,x,1。(mmm为叶子节点的个数)
由于题目良心地让我们输出ans∗m!ans*m!ansm!,所以说,输出的就是f1,x,1∗x!∗(m−x)!f_{1,x,1}*x!*(m-x)!f1,x,1x!(mx)!

然而这个算法看上去是O(n3)O(n^3)O(n3)的,我在很长时间内也这么认为。
YMQ:我吸一口臭氧,也能过!
但时间复杂度实际上是O(n2)O(n^2)O(n2)
为什么?
从最简单的开始考虑:如果这棵树是一棵二叉树,对于一个非叶子节点,当大小分布比较均匀时:
对于根节点,合并子树的时间是(n2)2=n24\left(\frac{n}{2}\right)^2=\frac{n^2}{4}(2n)2=4n2
对于下一层,时间是2(n4)2=n282\left(\frac{n}{4}\right)^2=\frac{n^2}{8}2(4n)2=8n2
再下一层,时间是4(n8)2=n2164\left(\frac{n}{8}\right)^2=\frac{n^2}{16}4(8n)2=16n2
后面的就不枚举了。
把它们全部加起来,时间就趋近于n22\frac{n^2}{2}2n2
当大小分布不均匀时,我们考虑最极端的情况,时间复杂度还是O(n2)O(n^2)O(n2)
至于不均匀而又不极端的情况……感性理解,不信邪的可以打一个DP来求最坏的情况。
考虑一下多叉树,发现其实际上是类似的,时间复杂度是O(n2)O(n^2)O(n2)
最终我还是不会证明……


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 5000
#define mo 1000000007
int n;
struct EDGE{int to;EDGE *las;
} e[N*2+1];
int ne;
EDGE *last[N+1];
inline void link(int u,int v){e[++ne]={v,last[u]};last[u]=e+ne;
}
long long jc[N+1];
int tot[N+1];
long long f[N+1][N+1][2];
void dfs(int x,int fa,bool flag){if (last[x]->las==NULL && last[x]->to==fa){//叶子节点的情况tot[x]=1;f[x][0][1]=f[x][1][0]=1;return;}EDGE *ei=last[x];//另外处理第一个儿子,这样就不用考虑初始化if (ei->to==fa)ei=ei->las;dfs(ei->to,x,!flag);memcpy(f[x],f[ei->to],sizeof f[ei->to]);tot[x]=tot[ei->to];ei=ei->las;if (flag==0){for (;ei;ei=ei->las)if (ei->to!=fa){dfs(ei->to,x,1);for (int j=tot[x]+tot[ei->to];j>=0;--j){//k=0f[x][j][1]=(f[x][j][0]*f[ei->to][0][1]%mo+f[x][j][1]*f[ei->to][0][0]%mo+f[x][j][1]*f[ei->to][0][1]%mo)%mo;f[x][j][0]=f[x][j][0]*f[ei->to][0][0]%mo;for (int k=1;k<=tot[ei->to] && k<=j;++k){(f[x][j][1]+=(f[x][j-k][0]*f[ei->to][k][1]%mo+f[x][j-k][1]*f[ei->to][k][0]%mo+f[x][j-k][1]*f[ei->to][k][1]%mo))%=mo;(f[x][j][0]+=f[x][j-k][0]*f[ei->to][k][0])%=mo;}}tot[x]+=tot[ei->to];}}else{for (;ei;ei=ei->las)if (ei->to!=fa){dfs(ei->to,x,0);for (int j=tot[x]+tot[ei->to];j>=0;--j){//k=0f[x][j][0]=(f[x][j][0]*f[ei->to][0][0]%mo+f[x][j][0]*f[ei->to][0][1]%mo+f[x][j][1]*f[ei->to][0][0]%mo)%mo;f[x][j][1]=f[x][j][1]*f[ei->to][0][1]%mo;for (int k=1;k<=tot[ei->to] && k<=j;++k){(f[x][j][0]+=(f[x][j-k][0]*f[ei->to][k][0]%mo+f[x][j-k][0]*f[ei->to][k][1]%mo+f[x][j-k][1]*f[ei->to][k][0]%mo))%=mo;(f[x][j][1]+=f[x][j-k][1]*f[ei->to][k][1])%=mo;}}tot[x]+=tot[ei->to];}}
}
int main(){freopen("game.in","r",stdin);freopen("game.out","w",stdout);scanf("%d",&n);jc[0]=1;for (int i=1;i<=n;++i)jc[i]=jc[i-1]*i%mo;for (int i=1;i<n;++i){int u,v;scanf("%d%d",&u,&v);link(u,v),link(v,u);}dfs(1,0,0);long long ans=0;for (int i=0;i<=tot[1];++i)ans=(ans+f[1][i][1]*jc[i]%mo*jc[tot[1]-i]%mo)%mo;printf("%lld\n",ans);return 0;
}

总结

这道题有一个·很奇妙的思想,就在于∑xP(x=ans)=∑P(x≤ans)\sum xP(x=ans)=\sum P(x \leq ans)xP(x=ans)=P(xans)

通过这个东西,可以大大地简化题目。
当条件为“等于”的时候,我们可以试着转化成“大于”“小于”。
然后就是树上背包的时间复杂度……

http://www.lbrq.cn/news/1314703.html

相关文章:

  • 帮做钓鱼网站会怎样/直接下载app
  • 富阳有没有做网站的/保定网站建设方案优化
  • wap手机网站建设方案/网站seo博客
  • 常州外贸建站/西安网站定制开发
  • 宝坻网站建设制作/网站建设制作免费
  • 太仓企业网站建设公司/百度站长链接提交
  • 社区营销模式/青岛官网seo
  • 东莞网站建设多少钱/网站查询
  • 商品交换电子商务网站开发/一个产品的网络营销方案
  • 黑龙江省住房和建设厅网站/外贸建站推广公司
  • 易优cms插件/seo上排名
  • 懒人做图网站/seo是搜索引擎优化吗
  • 学网站开发首先学哪些基础/如何找外包的销售团队
  • 手机怎么防止网站跳转/星沙网站优化seo
  • 郑州做网站好/重庆seo博客
  • 火车头wordpress5.0发布模块/seo服务公司上海
  • macromedia怎么做网站/网络营销竞价推广
  • 小米商城网页设计论文/网站建设优化
  • 廊坊网站制作服务/信息流优化师培训机构
  • 如何在百度做网站推广/廊坊seo
  • 好商网的网站可以做中英文切换吗/百度经验首页
  • 一个人可以做网站吗/网络营销案例
  • 国外网站代理/网站开发需要的技术
  • 多用户购物商城源码/石家庄seo关键词
  • 做招聘网站怎么赚钱/关键词搜索查询
  • 成都系统网站建设/百度新闻发布平台
  • 叮当快药网站谁做的/品牌推广
  • 新网站怎么做权重/中国十大互联网公司排名
  • 建设网站的技术难点/危机舆情公关公司
  • 派出所web网站建设策划案/微信引流推广
  • 编程项目选择思考点以及项目包装的关键点
  • 9、线程理论1
  • 【亲测有效】ubuntu20.04服务器新建用户+vnc配置教程
  • 经典排序算法之希尔排序
  • 基于多智能体强化学习的医疗检索增强生成系统研究—MMOA-RAG架构设计与实现
  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案