原创 Codeforces Cow and Message(字符串、dp)

題目大意: 給定一個由小寫字符組成的字符串,求字符串中出現最多的子序列的出現次數 解題思路: 由題意我們思考可以得到,出現次數最多的子序列必定是長度爲2或者1的子序列,長度大於2且出現次數超過長度爲2的子序列的出現次數的情況是不

原创 Codeforces Boredom(dp)

題目大意: 給定一個數組,從中刪除數字,如果一次操作爲刪除k,則k-1和k+1也被刪除,此次操作的得分爲k,問當數組中的數完全被刪除時最高得分爲多少 解題思路: 考慮到an的範圍,可以令arr[i]爲操作到數i時的最大得分,則有

原创 Codeforces Xenia and Colorful Gems(二分查找、枚舉)

題目大意: 給定三個數組,從三個數組中分別選出一個數字,使得要求的結果表達式最小 解題思路: 由題意可知三個數x<=y<=z,枚舉y,二分查找找到最接近與y的x與z,求結果,取所有結果的最小值 #include <bits/st

原创 Codeforces Little Girl and Maximum Sum(差分)

題目大意: 給出n項的數列A[ ], q個詢問, 詢問 [ l, r ] 之間項的和. 求A的全排列中該和的最大值. 解題思路: 涉及到區間修改,每次修直接循環,複雜度有可能會被卡到n^2,所以用一維差分 代碼: #includ

原创 Codeforces Taxes(數論)

解題思路: 代碼: #include <bits/stdc++.h> using namespace std; int n,ans; bool judge(int x) { for(int i=2;i*i<=x;++i

原创 Codeforces Eugene and an array(前綴和)

題目大意: 給你一個長度爲n的數組,求不含和爲0的子串的個數 解題思路: 代碼: #include <bits/stdc++.h> using namespace std; #define ll long long int n

原创 Codeforces Linova and Kingdom(樹形結構、貪心)

題目大意: 給定一顆有n個節點的樹,從中選出k個節點,從每個節點走到根節點1,路徑中經過的未選中的節點的個數爲kx,求一種選擇方案,使總的kx之和最大。 解題思路: 求出每個節點對總值的貢獻值,加入選擇節點x,那麼該節點的貢獻值

原创 旅旅旅遊(最短路、查並集)

解題思路: 代碼: #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e6+10; ll dis1[maxn

原创 人人都是好朋友(查並集、數據離散化)

代碼: #include <bits/stdc++.h> using namespace std; int t,n; const int maxn=5e6+10; int arr[maxn]; int a[maxn]; int

原创 洛谷—P1809 過河問題(經典動態規劃問題)

解題思路: 這一題運用的是貪心思想,不能想出,每一步的最優解存在於兩種方案中,第一種是過河最短時間的人開船過來,接走一個過河時間最長的人再開船返回。第二種是過河時間最短的人開船過來,他留下,讓當前兩個最長過河時間的人乘船過岸,然

原创 樹上子鏈(樹形DP)

解題思路: 定義dp[i],代表該子樹中最大的一條鏈(由葉子到根),注意到有可能葉子的權全是複數,所以我們把res初始化爲負無窮。 核心代碼: void dfs(int u,int f) { dp[u]=w[u]; for(

原创 倉庫選址(前綴和、數學)

解題思路: 二維前綴和(O(NM)) 這個算法可能比較簡單易懂,二維前綴和的實現與計算就不再贅述了,可以上網查一下 在暴力方法一中每次枚舉一個座標都要把到所有點的距離重新算一遍,其實沒必要。 若倉庫在點 (x,y) 處,現在將倉

原创 樹上求和(DFS)

解題思路: 一條邊左邊節點個數乘以右邊頂點個數等於這條邊出現的次數 #include<bits/stdc++.h> using namespace std; #define ll long long vector<int> e

原创 洛谷—P3870 開關(線段樹入門)

此處應該注意lazy的維護,即lazy的值應該是在1-0之間翻轉的,其他沒問題 代碼: #include<bits/stdc++.h> using namespace std; const int maxn=100010; #d

原创 tokitsukaze and soldier(優先隊列、貪心)

解題思路: 由題目可知要求一個集合,使集合大小滿足元素的限制且元素之和最大。 一個顯然的貪心思想:在滿足條件的前提下使得和最大。要求和最大,就可以使用堆來維護。 因此,可以先按 ss 從大到小排序,維護一個小根堆,每插入新元素之