zoukankan      html  css  js  c++  java
  • 《程序设计语言综合设计》第四周上机练习——3 开机方案

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,k,i,j,a[100005],b[100004],m=0;
     5 int main()
     6 {
     7     cin>>n>>k>>a[i];
     8     for(i=1;i<n;i++) {cin>>a[i];b[i]=a[i]-a[i-1];}//输入
     9     sort(b+1,b+n);//将b从小到大排序
    10     for(i=1;k++<n;m+=b[i++]-1){}//每次连接时间距离最近的任务,使m增量最小
    11     cout<<m+n<<endl;//输出
    12 }

    与第三周的练习“不诚实的卖家”思路基本一致:

    1.当无能量限制时,时间m自然等于n(每个任务做完就把电脑关掉)

    2.当有能量限制时,每次循环,需找到相邻的两个任务,使得连续完成它们“多花费的时间”最少

    例如数据:

    10 5
    1 2 5 6 8 11 13 15 16 20(数组a)
    先把“每组相邻任务连续完成多花费的时间”记录到数组b:b[i]=a[i]-a[i-1]-1;
    得到数组b:0,2,0,1,2,1,1,0,3;
    由于能量为5,任务为10,故需要把(10-5)组任务连在一起完成;
    即10-5次循环,每次m+=b[i]min;
    过程:m=n=10;
    m+=0,0,0,1,1;
    m=12;

  • 相关阅读:
    面向对象———类
    二维数组简单使用
    数组——算法
    第6章 约束满足问题CSP
    第5章 对抗搜索
    第4章 超越经典的搜索
    140303 命令行选项 ccf
    150904 高速公路 ccf
    170304 地铁修建 ccf
    vector容器
  • 原文地址:https://www.cnblogs.com/miaohengming/p/12499691.html
Copyright © 2011-2022 走看看