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

广州网站设计哪个好seo建站网络公司

广州网站设计哪个好,seo建站网络公司,建设网站的重要性,农业信息网站建设意义第一次做洛谷系列,紧张,请多关照哦 题目传送门:[SDOI2007] 科比的比赛 - 洛谷 思路分析 这道题大概题意是给定我们的主人公 Kobe Bryant 的 mm 个对手,nn 场比赛相对应的获胜概率。求 Kobe Bryant 最大全部获胜概率和打败对手能…

第一次做洛谷系列,紧张,请多关照哦

题目传送门:[SDOI2007] 科比的比赛 - 洛谷

 

思路分析

这道题大概题意是给定我们的主人公 Kobe Bryant 的 mm 个对手,nn 场比赛相对应的获胜概率。求 Kobe Bryant 最大全部获胜概率和打败对手能力值之和。

这道题可以使用 dfs 的思路解决。但是 Kobe Bryant 的对手非常多(也就是 mm 的值非常大),直接搜索的时间复杂度肯定非常高,就需要一些有效的剪枝。

最容易想到的是最优性剪枝,也就是如果当目前答案已经不优于已经存在的答案就可以直接放弃这个答案。

具体来说就是在 dfs 函数中加入:

if(cmp_double(tmp1,ans1)==0) return;

但是这样的优化显然是明显不够的。

这个题目有一个写的很明显特性是 n≤mn≤m。由于 nn 的值很小,而 Kobe Bryant 在每场比赛只能对战一个对手,所以 Kobe Bryant 只需要对战 nn 个对手并不是 mm 个。翻译成白话文就是 Kobe Bryant 可以只找弱的打,也就是找成功概率高的打。根据这个特性,我们可以在搜索时只搜前 nn 弱的对手。也可以理解这个剪枝是贪心的思路,因此 Kobe Bryant 的对手就少了很多。再根据前一条剪枝可以拿到 4040 分。

最后考虑到的是可以使用启发式搜索剪枝优化,对当前的结果进行估计,也就是即使是当前状态的最优情况,目前 Kobe Bryant 的获胜概率仍然没有已有最优情况高的时候舍弃。为了保证估计的效率,可以使用预处理的方式让每次询问复杂度降到 O(n)O(n)。

进行以上三次优化的思路是已经可以通过本题了。

代码

#include<bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define antirep(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1e6,M=1e3;
const double err=1e-10;
bool vst[N];
double ans1,pr[N],Gl[N];
int n,m,a[N],ans2;
struct node{int id;double p;}k[M][M];
int cmp_double(double x,double y){if(abs(x-y)<err) return 2;if(x-y>err) return 1;if(x-y<err) return 0;return 0x7fffffff;
}
bool cmp(node x,node y){if(cmp_double(x.p,y.p)==2) return a[x.id]>a[y.id];return x.p>y.p;
}
int f(int cur,double tmp1){return cmp_double(tmp1*pr[cur],ans1);
}
void prepare(){pr[n]=k[n][1].p;antirep(i,n-1,1)pr[i]=pr[i+1]*k[i][1].p;
}
void dfs(int cur,double tmp1,int tmp2){if(cur>n){if(cmp_double(tmp1,ans1)==1||cmp_double(tmp1,ans1)==2){ans1=tmp1;if(tmp2>ans2) ans2=tmp2;}return;}if(cmp_double(tmp1,ans1)==0) return;if(f(cur,tmp1)==0)return;rep(i,1,n){int ID=k[cur][i].id;if(vst[ID]==1) continue;vst[ID]=1;tmp1*=k[cur][i].p,tmp2+=a[ID];dfs(cur+1,tmp1,tmp2);tmp1/=k[cur][i].p,tmp2-=a[ID],vst[ID]=0;}return;
}
signed main(){cin>>n>>m;rep(i,1,m) cin>>a[i];rep(i,1,n){rep(j,1,m)cin>>k[i][j].p,k[i][j].id=j;sort(k[i]+1,k[i]+1+m,cmp);}prepare();dfs(1,1,0);cout<<fixed<<setprecision(12)<<ans1<<endl;cout<<ans2<<endl;return 0;
}

这里对代码进行一些解释,因为本题是浮点数操作,浮点数会在精度很高的时候产生误差,因此这里使用了 cmp_double 函数进行比较浮点数大小。

预处理之所以是逆序的储存是因为正序的搜索每次询问的都是剩余比赛的最有情况。

排序可以保证把 Kobe Bryant 最弱(也就是获胜概率最高)的对手放在每场比赛的最前面。

后记

备注:Kobe Bryant 是本题主人公科比的原名。而在 20202020 年,科比本人乘坐的西科斯基 S−76S−76 直升机在美国加利福尼亚州洛杉矶县卡拉巴萨斯市坠毁。年仅 4141 岁。

虽然我们不能跟题目重所描述的那样帮助科比赢得比赛,但是我们可以通过解出这道题淡化对科比离去的哀伤。

牢大,我想你了。

http://www.laogonggong.com/news/96142.html

相关文章:

  • 做美剧盗版网站优秀营销策划方案
  • 新农宝网站建设方案手机设计图纸软件
  • 网站加网页五个网站
  • 企业类网站做个公司网站一般需要多少钱
  • 商业网站建站做个app软件多少钱
  • 网站流量的做微信开放平台是干什么用的
  • 优秀网站设计赏析怎么写天津网站建设制作品牌公司
  • 临湘市建设局网站网站后台如何修改密码
  • 做网站大概花多少钱网站seo顾问
  • 网页制作优质网站哪种nas可以做网站服务器
  • 网站报价明细表怎么自己做视频网站
  • 做厂房出租有那些推广网站网站建设中图片多少钱
  • 吐鲁番市建设局网站湖北省建设工程造价管理站网站
  • 学做网站的软件东莞百度seo哪里强
  • 注册网站需要房产证php网站建设论文
  • 葫芦岛高端网站制作做西餐的网站
  • 杭州住房城乡建设网站查询网站免费建站方法
  • 网站和网站的app做网站有什么好书籍
  • 胶州专业网站建设公司广州安全教育平台登录账号登录
  • 河南做网站那家最好大有网网站
  • 浙江平板网站建设动漫人物设计
  • 济南网站建设开发公司怎么看网站是否安装百度商桥代码
  • 高端定制建站公司wordpress 评论添加表情
  • 青岛做英文网站的公司wordpress广告联盟插件
  • 海口 网站建设wordpress 幻灯片代码在哪里设置
  • 如何提高网站排名保险公司网站策划
  • cmd iis网站南京外贸网站建设怎么收费
  • 化妆品网站程序有哪些做国际贸易的网站
  • 广东建设银行招聘网站南阳微网站
  • 杭州网站建设公司有哪几家怎么做 社区网站