supermarket
題目大意:
超市有n種商品,每個商品都有乙個利潤和保質期,超市每天只可以賣一種商品,求超市在保質期內賣出商品可獲得的最大利益。
思路:
貪心+二叉堆優化
在最大的保質期時間內找出利潤最大的商品賣掉,這個貪心思路是正確的,我們會發現我們的每乙個選擇都會被商品的保質期影響,即我們必須在商品的保質期內賣出商品,所以我們可以將保質期與可選擇的次數相結合,得到以下方法:
將每種商品的保質期按從小到大順序排序。
使用小根堆維護已經選擇商品的價值,然後繼續選擇商品,這時會有這兩種情況:
1.當前商品的保質期大於已經選擇商品的次數,直接將此商品加入選擇之中;
2.當前商品的保質期等於已經選擇商品的次數,將這個商品的價值與小根堆的堆頂作比較,如果大於即替換,否則不變。
因為每次都選擇最優的選項,保證了演算法的正確性。**:
#includeusing namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define lowbit(x) x&(-x)
typedef long long ll;
typedef pairpii;
typedef pairpll;
const int n = 1e4+5;
const ll mod = 1e9+7;
const int inf = 0x3f3f3f3f;
const double eps =1e-9;
const double pi=acos(-1.0);
const int dir[8][2]=;
ll qpow(ll x,ll y)
return ans%mod;
}int p[n],t[n],c[n];
bool cmp(int x,int y)
每日一題 1
題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...
每日一題2018 3 21
leetcode 2 模擬十進位制運算考察單鏈表基本操作。題無難點,個人基礎需要提高。definition for singly linked list.struct listnode class solution while p while q if shi val s next null ret...
每日一題2018 3 22
leetcode 03 最長不重複子串 第一反應就是動態規劃。看到了網上的方法一。直接把問題簡化為找兩個重複字元間的最長距離,太巧妙了!class solution if i idx max locs s i i return max ling老師的方法二 仍舊轉化為動態規劃,但是為節省空間不再開個...