zoukankan      html  css  js  c++  java
  • USACO Ski Course Design解析和C语言实现

    题目大意:

    John农场有N1=<N<=1000)小丘陵(山),它们高度的范围从到 100 但仅仅有当最大的高度差不大于17时。才干够避税。John对它们进行改造,从高的丘陵上取土放到较矮的丘陵上,每改变 单位的高度。将会花费 x^2的钱。每一个丘陵的高度仅仅能改变一次。每次改变的值为整数。

     

    PROGRAM NAME: skidesign
    INPUT FORMAT

    第一行:一个整数n 第二行到N+1行:每行是一座山的海拔高度

    SAMPLE INPUT (file skidesign.in)

    5 20 4 1 24 21

    (约翰的农场有5座山,海拔为1,4,20,21和24)

    OUTPUT FORMAT

    约翰须要支付改动山海拔高度的总金额,最高和最低的山峰间高度差最多17。

    SAMPLE OUTPUT (file skidesign.out)

    18

    (约翰保持高度为4、20和21的山的高度。他增高高度为1的山、变成高度4(花费 3 ^ 2 = 9)。

    他减少了高度为24的山变成高度21也花费3 ^ 2 = 9。)

     


    这道题開始的时候,想到差值是在于最高和最低峰值间。故先排序。获得最大最小值。检查差值是不是大于17,大于则更改,然后循环排序检查。直到所有满足。但这样比較复杂,事实上就是在使所有的高度都在  一个差值小于等于17  的区间 范围内。

     

    解法:

    直接枚举长度为17的区间范围(0-100内,(0,17) , (1,18), (2,19), ..., (83,100))。

    计算全部山峰要在这个范围内,改变山的高度所须要花费的成本。


    /*
    ID: abc18711
    LANG: C
    TASK: skidesign
    */
    
    #include <stdio.h>
    
    #define MAXN 1001
    
    int main()
    {
     	int N;
    	int hills[MAXN];
    	
    	int i, j;	
    	
    	int cost;
    	int mincost;
    
    	FILE *fin = fopen("skidesign.in", "r");
    	FILE *fout = fopen("skidesign.out", "w");
    	
    	fscanf(fin, "%d", &N);
    	
    	for (i=0; i<N; i++)
    		fscanf(fin, "%d", &hills[i]);
    
    	//all the possible interval
    	
    	mincost = 99999999;
    	for (i=0; i<=83 ;i++)
    	{
    		//the current interval is [i,i+17]
    
    		cost = 0;
    		
    		//judge every hills
    		for (j=0; j<N; j++)
    		{
    			if (hills[j] < i)
    				cost += (i-hills[j])*(i-hills[j]);
    			else if (hills[j] > (i+17)) 
    				cost += (hills[j]-i-17)*(hills[j]-i-17);
    		}
    
    		if (mincost > cost) mincost = cost;
    	}
    	
    	fprintf(fout, "%d
    ", mincost);
    	
    	fclose(fin);
    	fclose(fout);
    	
    	return 0;
    }
    






  • 相关阅读:
    JAVA基础——编程练习(二)
    JAVA基础——面向对象三大特性:封装、继承、多态
    JVM内存
    50. Pow(x, n) (JAVA)
    47. Permutations II (JAVA)
    46. Permutations (JAVA)
    45. Jump Game II (JAVA)
    43. Multiply Strings (JAVA)
    42. Trapping Rain Water (JAVA)
    41. First Missing Positive (JAVA)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7047332.html
Copyright © 2011-2022 走看看