kao這場比賽也是醉了。
下午剛騎完環城晚上醉醺醺的。
敲完以後覺得感覺很好,就估分估了240
被小c嚴重鄙視說不可能
然後第一題爆0了==
現在說一下題目。
t1
模擬題,因為兩句話寫反了導致全部都t了。
t2
一道裸的字首和優化dp
算了還是寫的詳細點吧==
sourcescodeforces 645 e
description
給出長度為m的字串以及k個小寫字母,求再任意加上n個字元(在k的範圍內)總串不同子串行的個數的最大值。
注意:空串也計 入統計。
solution
定義dp[i]表示以str[i]為結尾的與之前的不同子串行的個數
那麼轉移的時候只要轉移到之前相同處即可。
然後ans=∑n
+mi=
1 dp[i]
為了讓ans最大我們最好最大化dp[i]
然後轉移的時候dp[i]=∑i
−1i=
last
[str
[i]]
dp[i]
最大化的dp[i]也可以同時最大化後面的dp值。
關於後面的n個字母,由於轉移方程一定,我們希望讓last[str[i]]盡量小就好了。
作為全場唯一個a掉的現在想來還有點小激動。。
雖然它是字首和優化dp的**。
t3
sourcescodeforces 152e(有改編)
description
給定乙個n*m的矩陣,以及k個座標,求包含k個座標的的四聯通塊的點的權值的最小值。
solution
這題給了很多的水分點。最小最簡單的那個掛了==
現在一萬個不爽。。整整少了10分==
表程是所謂狀壓dp
這個dp是用填表(坑)法來實現的。
首先我們令dp[i][j][s]表示點(i,j)覆蓋狀態為s的最小點權和。
它可以向四周填坑。
可以自己填自己,當然這要有個前提就是剛好自己裡有乙個狀態覆蓋和當前沒有交集。
這樣的狀態好像很亂。
瞎逼跑個最短路就好了。。
放個源**
#include
#include
#include
#include
#include
using
namespace
std;
const
int m=105;
const
int ss=1
<<8;
const
int inf=1
<<30;
int dp[m][m][ss],a[m][m],n,m,k,mx,my,ans;
bool mark[m][m][ss];
struct nodec[m];
struct status
};int rx=;
int ry=;
priority_queueque;
inline
void min(int &a,int b)
inline
bool check(const
int &x,const
int &y)
inline
void bfs());
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
que.push((status));
for(;!que.empty();)
int main()
20160602常規賽總結
task1蠻有趣 task2暴力dp 聽老師講了什麼字首和愣是沒想通暴力的dp為什麼要字首和。如果有字首和我的dp就是o n 了。task3有一些問題 比如為什麼關於開關問題同乙個區間不會反轉兩次,雖然理由很有道理,但是我理解不通。智商不夠。那麼以後只好記結論了 最後一題放一下題目講一下思路。圖染色...
2016 10 5常規賽總結
哈哈忍不住先自嘲一下 不過其實今天做的還是很不錯的,比前幾次花式倒數強多了。特別是第三題的樹鏈剖分200行能夠寫出來還是感覺很棒的。雖然ak大犇直接暴力修改就過了 第一題有乙個地方,細節做得不是很好,只有90分,當然如果想法比較好的話就不會有這些問題了,也會比較短。第二題沒什麼問題,直接dp稍微優化...
小公尺 OJ 程式設計比賽 02 月常規賽
carryon 最近迷上了數數字,然後 starry 給了他乙個區間 l,r 然後提了幾個要求,需要將 ll 到 rr 之間的數全部轉化成 16 進製,然後連起來。將連起來的數又轉化成 10 進製。將最終結果對 15 取模。資料範圍 1 l r 1000000000000 單組輸入 l和 r的值 輸...