zoukankan      html  css  js  c++  java
  • 洛谷P3650 [USACO1.3]滑雪课程设计Ski Course Design

    题意:

    给定一个数组,每次可以对数组中的任意一个数改动,改变(x)数值要(x²)的代价,要求数组中的最大数与最小数的差小于(17)
    (n≤1000),数组中每个数(≤100)

    思路:

    一看这数据就可以得出,(O(N^2))轻松水过。
    因为每个数都小于等于100,所以我们枚举最大值从(1)(100),每次求出当最大值为(i)的时候,将所有数改动成符合要求所花费的代价,从中间取最小值,输出即可。

    code:

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    #include <queue>
    using namespace std;
    const int N=10005;
    long long ans=0x7f7f7f7f,a[N],n;
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    	}
    	for(int i=17;i<=100;i++)//最大值最小是17,不是1,要不然都成负的了
    	{
    		long long sum=0;
    		for(int j=1;j<=n;j++)
    		{
    			if(a[j]<i-17)//如果比最小值小,则加上
    			{
    				sum+=(i-17-a[j])*(i-17-a[j]);
    			} 
    			else if(a[j]>i)//如果比最大值大,则削去
    			{
    				sum+=(a[j]-i)*(a[j]-i);
    			}
    		}
    		ans=min(ans,sum); //对所有求出的代价取min
    	}
    	cout<<ans;
        return 0;
    }
    
    
  • 相关阅读:
    说说Java中的代理模式
    一个奇怪的异常
    JDBC第二次学习
    浅谈事务
    JDBC第一次学习
    Firebug & Chrome Console 控制台使用指南
    js 事件创建发布
    vue ui之 iview 事件拦截
    fetch获取json的正确姿势
    js对象通过属性路径获取属性值
  • 原文地址:https://www.cnblogs.com/pjxpjx/p/12600445.html
Copyright © 2011-2022 走看看