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;
    }
    






  • 相关阅读:
    AtCoder Beginner Contest 089 D
    AtCoder Beginner Contest 088 D Grid Repainting
    [odb-users] query results not being cached?
    cmake使用示例与整理总结
    CMake使用总结
    Create schema error (unknown database schema '')
    [odb-users] Create schema error (unknown database schema '')
    ODB(C++ ORM)用Mingw的完整编译过程
    odb_sqlite_demo
    ODB——基于c++的ORM映射框架尝试(使用)
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7047332.html
Copyright © 2011-2022 走看看