原创 AcWing 1012. 友好城市(尋找隱含的LIS)

題目鏈接:點擊這裏 思路:將南岸的城市從小到大排序,那麼北岸的不相交的友好城市就是上升子序列。 #include<iostream> #include<cstdio> #include<cstring> #include<a

原创 藍橋杯 填空 乘積尾0

題目描述 如下的10行數據,每行有10個整數,請你求出它們的乘積的末尾有多少個零? 5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 74

原创 AcWing 1027. 方格取數(走兩次)

題目鏈接:點擊這裏 把走一次的過程重複兩次顯然是不行的,局部最優保證不了全局最優! 要求走兩次,並且走過的格子,數字就被取走了,且兩次走過的格子可能重合,換個思路,假設有兩個人同時從左上角出發,到達右下角,這和走兩次的情況是等

原创 藍橋杯 填空 U形數字

題目描述: 最近蒜頭君喜歡上了U型數字,所謂U型數字,就是這個數字的每一位先嚴格單調遞減,後嚴格單調遞增。 比如 212 ,84246,5323就是一個U型數字,但是 333, 98, 567, 31313,89,2就不是U型數字

原创 AcWing 291. 蒙德里安的夢想(狀壓dp)

題目鏈接:點擊這裏 思路:一列一列地考慮。先放橫着的,再放豎着的。總方案數就等於只放橫着的小方塊的合法方案數。 如何判斷當前方案是否合法? 所有剩餘位置能否填充滿豎着的小方塊。也就是可以按列來看,每一列內部所有連續的空着的小方

原创 牛客 A. 牛牛的DRB迷宮I(棋盤型dp)

題目鏈接:點擊這裏 #include<iostream> #include<algorithm> #include<cstdio> using namespace std; typedef long long ll; con

原创 AcWing 1015. 摘花生

題目鏈接:點擊這裏 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const

原创 AcWing 1018. 最低通行費

題目鏈接:點擊這裏 要在 2N−12N-12N−1 個單位時間內穿越出去,只能向下或向右走。 #include<iostream> #include<cstdio> #include<cstring> #include<alg

原创 線性DP

文章目錄【概述】【序列問題】1.基本概念2.LIS問題3.LCS 問題4.LCIS 問題【字符串編輯距離】1.概述2.Levenshtein 算法【最大和問題】1.最大子序列和2.最大子矩陣和3.數字三角形【例題】 【概述】 線性

原创 AcWing 896. 最長上升子序列 O(nlogn)模板題

題目鏈接:點擊這裏 從序列單調性的角度進行優化,LIS的O(nlogn)說白了其實是貪心算法。 以 (4,2,3,1,2,3,5)(4, 2, 3, 1, 2, 3, 5)(4,2,3,1,2,3,5) 爲例,求其最長上升子序

原创 AcWing 2. 01揹包問題(模板)

題目鏈接:點擊這裏 01揹包問題描述: 有 NNN 件物品和一個容量爲 VVV 的揹包。放入第 iii 件物品耗費的費用是 CiC_iCi​,得到的價值是 WiW_iWi​。求解將哪些物品裝入揹包可使價值總和最大。 這是最基礎

原创 AcWing 898. 數字三角形

題目鏈接:點擊這裏 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const i

原创 AcWing 890. 能被整除的數(模板)

題目鏈接:點擊這裏 暴力時間複雜度爲 O(nm)O(nm)O(nm),超時。 分析樣例,有整數集合 S={1,2,3,4,5,6,7,8,9,10}S=\left\{ 1,2,3,4,5,6,7,8,9,10\right\}S=

原创 AcWing 888. 分解質因數法求組合數(模板)

題目鏈接:點擊這裏 思路:將組合數分解質因數 p1c1p2c2...pkckp_1^{c_1}p_2^{c_2}...p_k^{c_k}p1c1​​p2c2​​...pkck​​,再利用高精度乘法即可求解。 Cnm=n!m!(n

原创 AcWing 877. 擴展歐幾里得算法(模板)

題目鏈接:點擊這裏 #include<iostream> #include<cstdio> using namespace std; // 求x, y,使得ax + by = gcd(a, b) int exgcd(int