蓝桥杯之贪心 Huffuman

    xiaoxiao2021-03-25  161

    题目是这样的: 1.本题需要使用的是贪心算法:

    - 贪心算法的基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。 - 基本思路 1.建立数学模型来描述问题。 2.把求解的问题分成若干个子问题。 3.对每一子问题求解,得到子问题的局部最优解。 4.把子问题的解局部最优解合成原来解问题的一个解。 - 实现框架 从问题的某一初始解出发; while (能朝给定总目标前进一步) { 利用可行的决策,求出可行解的一个解元素; } 由所有解元素组合成问题的一个可行解; 如下为代码:

    #include<stdio.h> void sork(int n,int arr[]) { int i=0,j=0,t=0; for(i=0; i<n; i++) { for(j=0; j<n-i-1; j++) { if(arr[j+1]>arr[j]) { t=arr[j+1]; arr[j+1]=arr[j]; arr[j]=t; } } } } int main() { int i=0,j=0,n=0,t=0; int arr[1000]; int min1=0,min2=0; int cost=0; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d",&arr[i]); } i=n-1; while(i>0) { sork(n,arr); min1=arr[i]; min2=arr[i-1]; cost+=(min1+min2); arr[i-1]=min1+min2; i--; } printf("%d",cost); system("pause"); return 0; }

    结果图:

    转载请注明原文地址: https://ju.6miu.com/read-12143.html

    最新回复(0)