zoukankan      html  css  js  c++  java
  • 抓牛

    试题描述

       农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来.

    他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+1或x-1处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.

           那么,约翰需要多少时间抓住那只牛呢?

    输入
    仅有两个整数N和K
    输出
    最短时间
    输入示例
    5 17
    输出示例
    4
     1 #include <iostream>
     2 
     3 using namespace std;
     4 int a[100001]={0};
     5 int main()
     6 {
     7     int minn,n,k,i;
     8     scanf("%D%D",&n,&k);
     9     if(n>=k){printf("%d",n-k);return 0;} //如果农夫在奶牛的前面,他只能一步一步往回走 
    10     for(i=1;i<=n;i++) a[i]=n-i;  //因为下面的循环是从n+1开始,所以n+1以前的每一格都要先赋上值 
    11     for(i=n+1;i<=k;i++)
    12     {
    13         if(i%2==0) //之所以要分类讨论奇偶性,是因为:偶数可以由(i/2)直接得到,而奇数却需要由(i/2)-1这两步得到,所加秒数不同。 
    14         {
    15             a[i]=min(a[i/2]+1,a[i-1]+1); //分类讨论(i/2)和(i-1)两种情况,次数要+1 
    16         }
    17         if(i%2!=0)
    18         {
    19             minn=min(a[(i+1)/2]+2,a[(i-1)/2]+2); //次数+2的原因上面说了。而(i+1)和(i-1)则是把他变成偶数 
    20             a[i]=min(minn,a[i-1]+1); //找比较小的,秒数最少 
    21         }
    22     }
    23     printf("%d",a[k]);
    24     //system("pause");
    25     return 0;
    26 }
    抓牛

    本题用到动态规划(或者说是递推),类似于背包问题。

  • 相关阅读:
    Asp.Net图片上传
    JQuery实现CheckBox全选全不选
    DES加密解密公用方法(详细注释)
    sysobjects
    window.onload和$(document).ready()区别
    Ajaxpro2 实现三级联动
    idea Mac版过期处理方法.适用于JetBrains全家桶
    rabbitmq报错Failed to start RabbitMQ broker
    pip install image 失败,加上国内源
    关于系统程序员的一些感悟
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5002317.html
Copyright © 2011-2022 走看看