pat 甲级 1172 Panda and PP Milk【超简单思路】

PP milk (盆盆奶)is Pandas' favorite. They would line up to enjoy it as show in the picture. On the other hand, they could drink in peace only if they believe that the amount of PP milk is fairly distributed, that is, fatter panda can have more milk, and the ones with equal weight may have the same amount. Since they are lined up, each panda can only compare with its neighbor(s), and if it thinks this is unfair, the panda would fight with its neighbor.

Given that the minimum amount of milk a panda must drink is 200 ml. It is only when another bowl of milk is at least 100 ml more than its own that a panda can sense the difference.

Now given the weights of a line of pandas, your job is to help the breeder(饲养员)to decide the minimum total amount of milk that he/she must prepare, provided that the pandas are lined up in the given order.

Input Specification:

Each input file contains one test case. For each case, first a positive integer n (≤104) is given as the number of pandas. Then in the next line, n positive integers are given as the weights (in kg) of the pandas, each no more than 200. the numbers are separated by spaces.

Output Specification:

For each test case, print in a line the minimum total amount of milk that the breeder must prepare, to make sure that all the pandas can drink in peace.

Sample Input:

10
180 160 100 150 145 142 138 138 138 140

Sample Output:

3000

Hint:

The distribution of milk is the following:

400 300 200 500 400 300 200 200 200 300

题目意思:熊猫至少喝200ml牛奶,不同重量有差异,差异至少是100ml,相同重量,喝的牛奶相同。

 思路:先给每个熊猫都分200ml牛奶,再从头到尾遍历一遍和邻居比较重量,同时比较牛奶量,对于不满足重的喝的多这个条件的每次+100,直到进行到全部满足。注意:对于相同重量由于两边的邻居不同,所以再相同重量的这个地方我们还需要进行比较,以保证他们满足相同重量喝的牛奶量相同。

代码如下:

#include<iostream>
using namespace std;
const int N=10005;
int a[N]={0},s[N]={0},sum=0;
int main(){
	int n,MIN=N;
	cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=0;i<n;i++){
    	s[i]=200;
	}
	int flag=1,tmp=1;
	while(flag==1){
		tmp=1;
		for(int i=0;i<n;i++){
	 	    if((a[i]>a[i+1]&&s[i]<=s[i+1])){//左边对右边的影响 
	 	    	 s[i]+=100;
	 	    	 tmp=0;
			 }else if((a[i]>a[i-1]&&s[i]<=s[i-1])){// 右对左的影响 
					 s[i]+=100;
	 	    	     tmp=0;
		     }else if(a[i]==a[i+1]&&s[i]<s[i+1]){ 
		     	s[i]+=100;
		     	 tmp=0;
			 }else if(a[i]==a[i+1]&&s[i]>s[i+1]){
			 	s[i+1]+=100;
			 	 tmp=0;
			 }
	    }
	    if(tmp==1)flag=0;
	}
	for(int i=0;i<n;i++){
	   //cout<<s[i]<<" ";
    	sum+=s[i];
	}
	cout<<sum;
	return 0;
}


  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值