1. 程式人生 > 實用技巧 >LowBit原理實現格雷碼的生成

LowBit原理實現格雷碼的生成

1.演算法總結

貪心演算法的主要思想就是貪,就硬貪,雖然我可能不能考慮全域性,但我就是要貪,從區域性的最優選擇方案找到整體的最優解。

2.例題分析

設有n 個程式{1,2,…, n }要存放在長度為L的磁帶上。程式i存放在磁帶上的長度是 li,1≤i≤n。 程式儲存問題要求確定這n 個程式在磁帶上的一個儲存方案, 使得能夠在磁帶上儲存儘可能多的程式。 對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。

輸入格式:

第一行是2 個正整數,分別表示檔案個數n和磁帶的長度L。接下來的1行中,有n個正整數,表示程式存放在磁帶上的長度。

輸出格式:

輸出最多可以儲存的程式數。

輸入樣例:

在這裡給出一組輸入。例如:

6 50 
2 3 13 8 80 20

輸出樣例:

在這裡給出相應的輸出。例如:

5

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n,length,num=0;
int a[10005];
cin>>n>>length;
for (int i = 0; i < n; i++){
cin>>a[i];
}
sort(a,a+n);
for(int i =0;i <n;i++){
if(length>=a[i]){
length -= a[i];
num++;
}else{
break;
}
}
cout<<num;
return 0;
}

演算法驗證:

假設題目所給的程式已從大到小排序a1,a2,a3,a4,a5。。。an

假設已有一個全域性最優解從大到小排序x1,x2,x3,x4,x5。。。xn

對於貪心演算法而言,總是先選擇an,如此類推,貪心演算法將得到最優解。

若xn不是an,則貪心演算法有更優解,