貪心演算法—
problem b&i
題意
要處理一些木棍,第一根的時間是1分鐘,另外的,在長度為l,重為w的木棍後面的那根的長度為l', 重量w',只要l <=l' 並且w <= w',就不需要時間,否則需要1分鐘,求如何安排處理木棍的順序,才能使花的時間最少。
解題思路
運用貪心演算法。先把這些木棍按長度和重量都從小到大的順序排列。設length1和weight1是第一根的長度和重量,依次比較後面的是不是比當前的length1,weight1大,是的話把標誌flag設為1,並跟新length1,weight1比較。比較完後,再從前往後掃瞄,找到第乙個標誌位為0的,作為是第二批的最小的一根,計數器加一。把它的長度和重量作為當前的length1,weight1,再迴圈往後比較。直到所有的都處理了。
感想
把長度和重量排好序後,關於如何在進行下一輪篩選時遇到了問題,用過指標太複雜也沒能實現,加入標誌位後通過標誌位來篩選比較過的木塊果然解決了問題。感覺題目很難,再接再厲。
ac
**
#include
#include
#include
#define size 5000
using namespace std;
struct sticksstick[size];
bool cmp(sticks a,sticks b)
int main()
sort(&stick[0],&stick[n],cmp);
stick[0].flag = 1;
length1=stick[0].length;
weight1=stick[0].weight;
time= 1;
for(j= 1; j < n; j++)
}
for(k=1;k
j = k;
if (j== n) break;
length1 = stick[j].length;
weight1= stick[j].weight;
stick[j].flag= 1;
time++;
}
cout<
}
}
經典貪心演算法 貪心演算法概述
貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...
演算法 貪心演算法
把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...
演算法 貪心演算法
集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...