首页 > 代码库 > soj 4390 电梯问题
soj 4390 电梯问题
背景:周赛题,当时未读。就算读了也只能想到暴力,不可ac。
学习:1.在暴力搜索超时的情况下,必须找到优秀的算法,这个题就是用类似变化趋势的角度来审视最优解而不是算出每层楼对应的值,找最大值。思路:假设当前楼层以下有n1人,当前楼层有n2人,当前楼层以上有n3人。每向上走一层就有n1+n2人要多走一楼,来
人要少走一楼,若从第0楼开始考虑,这时n1+n2是0,n3为总人数,然后依次上楼,n1+n2单增,n3单减,显然n1+n2>=n3停止上楼即取最大值。
代码:
#include <stdio.h> #include<stdlib.h> #include<math.h> short str[1000000]; int main(){ int t; scanf("%d",&t); while(t--){ int n,floor,n1=0,n2=0,n3,sum=0; long long people=0; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%hd",&str[i]); sum+=str[i]; } for(int i=0;i<n;i++){ if(i>0) n1+=str[i-1]; n2=str[i]; n3=sum-n1-n2; if(n1+n2-n3>=0){ floor=i+1; for(int k=0;k<n;k++) people+=str[k]*(abs(i-k)); break; } } printf("%d %lld\n",floor,people); } return 0; }
soj 4390 电梯问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。