码迷,mamicode.com
首页 > 其他好文 > 详细

soj 4390 电梯问题

时间:2014-12-27 09:00:44      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

背景:周赛题,当时未读。就算读了也只能想到暴力,不可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 电梯问题

标签:

原文地址:http://blog.csdn.net/jibancanyang/article/details/42179759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!