????????Hello大家好!很高興我們又見面啦!給生活添點passion,開始今天的編程之路!
我的博客:<但凡.
我的專欄:《編程之路》、《數據結構與算法之美》、《題海拾貝》、《C++修煉之路》
歡迎點贊,關注!
1、題目
??
2、題解?
#include<iostream>
#include<algorithm>
using namespace std;
const int N=5010;
struct node
{int p;int a;
}w[N];
int n,m;
bool cmp(node& x,node& y)
{return x.p<y.p;
}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>w[i].p>>w[i].a; }//貪心int ret=0;sort(w+1,w+1+m,cmp);for(int i=1;i<=m&&n;i++){int sum=(n>=w[i].a)?w[i].a:n;ret+=sum*w[i].p;n-=sum;}cout<<ret<<endl;return 0;
}
????????算法是一系列解決特定問題或完成特定任務的明確指令步驟。簡單來說,它是計算機科學中的“食譜”,告訴計算機如何高效、準確地處理數據。算法的核心在于**輸入→處理→輸出**的邏輯。
算法的關鍵特性:
1. 有窮性:必須在有限步驟內結束。
2. 確定性:每一步驟的定義必須清晰無歧義。
3. 可行性:能用基本操作實現。
4. 輸入/輸出:有明確的輸入和輸出。
---
學習算法的有效方式與建議:
1. 夯實基礎
? ?- 數學基礎:離散數學、概率論、線性代數(尤其是圖論、遞歸、時間復雜度分析)。
? ?- 編程基礎:至少掌握一門語言(如Python、C++或Java),熟悉循環、遞歸、數據結構(數組、鏈表、樹等)。
2. 系統學習路徑
? ?- 經典算法分類學習:
? ? ?- 排序算法(快速排序、歸并排序)
? ? ?- 搜索算法(DFS、BFS、二分查找)
? ? ?- 動態規劃(背包問題、最長公共子序列)
? ? ?- 貪心算法(Dijkstra、霍夫曼編碼)
? ? ?- 圖算法(拓撲排序、最短路徑)
? ?- 推薦資源:
? ? ?- 書籍:《算法導論》《算法(第4版)》
? ? ?- 在線課程:Coursera的《Algorithms Specialization》(Stanford)、MIT OpenCourseWare。
?3. 刻意練習
? ?- 刷題平臺:LeetCode(按難度分類)、Codeforces(競賽向)、HackerRank(基礎鞏固)。
? ?- 從簡單題開始:先掌握暴力解法,再逐步優化(例如從O(n2)到O(nlogn))。
? ?- 定期復盤:整理錯題本,分析時間/空間復雜度。
4. **可視化與類比**
? ?- 用工具觀察算法執行過程(如VisuAlgo、Algorithm Visualizer)。
? ?- 將算法與現實類比(例如:快遞配送路徑≈旅行商問題)。
5. 參與實踐
? ?- 參與開源項目(如GitHub上算法相關的庫)。
? ?- 嘗試用算法解決生活問題(如用動態規劃優化個人時間安排)。
6. 避免常見誤區
? ?- 不要死記硬背代碼,理解思想更重要。
? ?- 不要急于求成,復雜度分析比AC(Accepted)更重要。
---
????????堅持每天解決1-2道題,3個月后會顯著提升。算法的核心是**模式識別+抽象能力**,需要長期積累。
?