43 最少操作数
作者: Turbo时间限制: 1S章节: 基本练习(数组)
问题描述 :
数组A中共有n个元素,初始全为0。你可以对数组进行两种操作:1、将数组中的一个元素加1;2、将数组中所有元素乘2。求将数组A从初始状态变为目标状态B所需要的最少操作数。
输入说明 :
第一行一个正整数n表示数组中元素的个数
第二行n个正整数表示目标状态B中的元素
n<=50,B[i]<=1000
输出说明 :
输出一行表示最少操作数
输入范例 :
2
7 8
输出范例 :
7
害,我太菜了,刚开始看到这道题一点思路都没有……
参考了一位大佬的才明白过来
解题思路及代码:
/*
T43 最少操作数
算法概述:逆向思维,题目中说要从a变换得到b,那也可以看成是从b变换得到a
对每个步骤的每个数,若它是奇数,那么它肯定是由上一个数加1得到的;若它是
偶数,由于要以最快的速度降到0,那么它肯定是由上一个数乘2得到的。这样就
可以一步步的变成0,统计下操作次数就可以了
*/
#include<stdio.h>
#define MAX_SIZE 55
int main()