原创 CodeForces - 450B 矩陣快速冪

#include <cstdio> #include <cstring> using namespace std; const int maxs = 2; const int mod = 1e9+7; struct Matrix

原创 CodeForces - 1005D_Polycarp and Div 3 DP

題目大意:給定一行字符串(len<=2e5),將該字符串劃分爲若干子串,問怎樣劃分能使對應的整數能被3整除的子串最多,求最多的數量 rem:從第一位開始,+每一位再對3取模 dp[i]:前i位能有多少個子串能被3整除 per[

原创 洛谷P1437 敲磚塊

題目大意:給定n*n的上半個矩陣,每一點表示一個磚塊。有敲掉該塊磚能得到的相應的分值。對於(i,j)的磚塊,若i==1,則可以直接敲掉;若i>1,則必須先敲掉(i-1,j)和(i-1,j+1);現在最多可以敲掉m塊磚,求最大得分

原创 poj1258 生成樹入門

題意:n個點,n*n的矩陣表示邊,求最小生成樹 (1)prim O(n^2) #include <cstdio> #include <cstring> #include <algorithm> using namespace s

原创 洛谷P1020 最長不上子序列及其個數

題目大意:輸入若干導彈的高度,用炮彈攔截,第一發炮彈能達到任意高度,第i發炮彈不能高於第i-1發炮彈。求一個炮彈系統能攔截的最多的導彈和若要攔截所有的導彈最少需要有多少炮彈系統 第一問即求最長不上升子序列的長度 第二問即求最長不

原创 CodeForces - 508E_Arthur and Brackets 括號問題(stack)

題目大意:給定括號總數n,再給出每組括號的左右半邊的下標相差範圍L, R,求滿足條件的括號序列,若不存在則輸出IMPOSSIBLE pos[i]:第i個括號的左半邊的位置 len:當前字符串長度 括號匹配成功的條件:pos[i

原创 CodeForces - 566D 並查集區間更新優化

題目大意:給定n個人,q個詢問。初始狀態下,1~n個人獨立。接下來q行,每行3個數字type(1,2,3), a, b。如果type==1,則將a和b並在一個集合;如果type==2則將a~b個人並在一個集合;如果type==3,

原创 poj3783 扔雞蛋

題目大意:給定n層樓,m個雞蛋,求最壞的情況下需要最少進行多少次扔雞蛋(從1樓往上走),使得雞蛋剛好摔碎。 dp[i][j]:剩餘i個雞蛋在第j層樓進行的最少次數 初始化: (1)dp[i][0]=0(在第0層樓還沒扔);dp

原创 poj2785 二分查找

題目大意:給定n行數(n<=4000),每行4個數。從這4列中,每列選擇一個數使其和爲0 暴力枚舉 O(n^4)會tle。 優化:枚舉第1,2列算出總和s1[],枚舉第3,4列算出總和s2[]。然後枚舉s1[],在s2[]中二分

原创 poj2784 Buy or Build 最小生成樹

題目大意:給定n個城市(1<=n<=1000),c個聯通塊(0<=c<=8)。再給定c個連通塊的信息:包含cnt個點和價格cost,並給出cnt個點的編號。再給定n個城市的座標。現在要將n個城市連在一起,可以購買聯通塊也可以新建邊

原创 CodeForces - 1007A_Reorder the Array 模擬+二分查找

題目大意:給定一個包含n個整數的數組a[],將該數組重排列,若對應位置上的數比原數組的大則++cnt,求最大的cnt; (1)將a[]按不降序排序。vector < int > v;初始化爲a[2~n]; (2)如果v的隊尾元素

原创 CodeForces 797C Minimal string

題目大意:給定一段字符串,用棧做容器,確定字符的入棧和出棧順序,將字符串變爲字典序最小並輸出 算法: (1) 遍歷字符串,直到棧爲空,將棧中小於當前字符的字符全部出棧。再將當前字符壓棧。 (2) 若遍歷完,棧不爲空,將棧中字符

原创 CodeForces - 722C_Destroying Array 並查集應用

題目大意:給定數組大小n,再給定數組元素(從1~n編號),最後給定數組元素的刪除順序,求執行完每一次刪除操作後,數組的最大連續子段和。 倒着處理,並查集。 (1)初始化數組爲空,倒着加入元素。 (2)每一次加入元素,如果其左右

原创 hdu1024 dp+枚舉優化+降維

題目大意:給定長度爲n的數組(1<=n<=1e6),求其中m個不相交子串的和的最大值 dp[i][j]:前i個數(以i結尾,i必取)組成j個不相交子串的答案 狀態轉移: dp[i][j] = max(dp[i-1][j]+a[i

原创 hdu1158_Employment Planning DP

題目大意:給定月數n,給定僱傭一個人的花費hi,每個人一個月的工資sa和開除一個人的花費fi。再給定每個月需要的最少人數num[i]。求每月怎樣安排僱傭和開除人,使得n個月的花費最少 maxn = max(num[i]); dp