原创 P4158 [SCOI2009]粉刷匠(dp)

一個比較好的性質:不可能存在不刷的情況,刷上就有可能對,所以得到遞推式 #include<cstdio> #include<iostream> using namespace std; int a[55][55]; int dp[55][5

原创 P4552 [Poetize6] IncDec Sequence

比較好的差分題目 #include<cstdio> #include<iostream> using namespace std; typedef long long ll; const int N=100005; int n; ll a[

原创 P4551 最長異或路徑

#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int N=2000005; int head[N],sum[N],ch[N

原创 P3435 [POI2006]OKR-Periods of Words(kmp)

#include<cstdio> #include<iostream> using namespace std; const int N=1000005; int n; long long ans; char s[N]; int nxt[N

原创 P5104 紅包發紅包

期望 #include<cstdio> #include<iostream> using namespace std; const int mod=1e9+7; typedef long long ll; ll w,n,k; ll ksm(

原创 二分貪心雜題

P4670 [BalticOI 2011 Day2]Plagiarism 更改了二分的寫法:將二分區間改爲左閉右開的一個區間,最後答案即在L。 注意小數0.9的處理 #include<cstdio> #include<iostream> #

原创 DP專項訓練

CF1097B Petr and a Combination Lock 設f[i][j]表示前i個操作,是否可以組成j這個角度,其中j∈[0,360),可以從f[i-1][j-a[i]]和f[i-1][j+a[i]]轉移過來,每次取一下模即

原创 CF140D New Year Contest(貪心)

按時長排序,在0時之前做的都在0時提交,0時之後的都直接提交,然後貪心做。 理解其正確性: 考慮對0時後罰時的理解:如果有沒做出來的題,那麼每一分鐘都會對罰時有貢獻,所以我們要使題的數量儘可能小,所以貪心是正確的。 #include<cst

原创 P2587 [ZJOI2008]泡泡堂(貪心)

類似田忌賽馬 首先這道題滿足對稱性:要想得到最差情況,只需求出對手的最優情況即可。 只考慮最優情況: 先不考慮相等情況: 如果當前最小大於對手最小,直接打掉,+2; 如果當前最大大於對手最大,直接打掉,+2; 否則用最小的換最大的,+0/+

原创 CF118C Fancy Number(模擬)

細節還是挺多的 首先找一個使得價值最小的數,注意這個數可能有很多,我們都要把它們存下來,然後嘗試更改,注意字典序問題,從後到前還是從前到後更改。 其中有貪心思想:設最後更改爲x,則按照x+1,x-1,x+2,x-2...順序更改。 注意ch

原创 P1029 [NOIP2001 普及組] 最大公約數和最小公倍數問題(歐幾里得)

歐幾里得,gcdlcm=xy的應用 #include<cstdio> #include<iostream> using namespace std; int gcd(int a,int b){ if(b==0) return a; re

原创 P3531 [POI2012]LIT-Letters(樹狀數組||逆序對)

轉換成求逆序對的問題。 如果沒有重複的字母,顯然是一一對應,用第二個串裏對應字符的下標i作爲position,然後得到一個position的序列,求這個序列的逆序對個數即爲步數。 因爲每交換一次,最多少一組逆序對。 (這個position代

原创 CF1396B Stoned Game(思路題)

如果存在一堆石子個數大於剩餘所有堆的的石子總數,那麼先手佔據此堆石子,先手勝。 否則,考慮最終狀態必定只有一堆石子,現證明雙方都可以通過設定操作策略爲取走目前可取的石子最多的那堆做到最後一堆石子被拿乾淨: 假設不被拿乾淨,必定是出現了最多石

原创 CF1385D a-Good String(分治)

一種分治的思想,看每次的左右區間,找一個需要更改小的進行更改,然後對另一個區間進行繼續往下分治的更改。 #include<cstdio> #include<iostream> using namespace std; int T,n; ch

原创 P1064 [NOIP2006 提高組] 金明的預算方案(DP)

可以將分組的揹包看成若干個01揹包來做。 #include<cstdio> #include<iostream> using namespace std; int read(){ int num=0,f=1; char c=getcha