Time of Update: 2018-12-06
“大多數人不喜歡別人說自己舉止不合宜,或說自己犯了錯誤;同樣,大多數人也不喜歡對他人說這類逆耳的忠言。”但“如果想從別人對你的批評中學到東西,就不要把批評當作一種冒犯,而是把它看作一個禮物。”這是《抱怨是金——將顧客的投訴看作珍貴的禮物》一書中的一個主要論點。書中還舉了個例子:如果我即將要在300個人前面做演說,而這時我的內衣露出一角,我會很高興有人及時給我指出來;如果我牙上粘了一片菠菜,我也希望立刻被告知。實際上,如果我的朋友沒有警告我這些社交缺陷,我會對他們很生氣:“你怎麼可以不告訴我?
Time of Update: 2018-12-06
我發現最近寫blog都是一補好幾天的。。。 1001, 0/1規劃,關鍵在構圖。。。。map[i][i]這種點不用考慮,其他點連成鄰接表就可以,然後從1到n求最短路。另外,“存在從1到1有一個環,從n到n有一個環”。所以要分別1->n, n->n跑一遍,1->n求出的dis[n]跟1->1有環,n->n有環這種情況比較一下,取小值。 1002 偶不知道怎麼證明,不過,如果比賽的時候瞎猜這個題,應該可以過的。。。T_T 1005
Time of Update: 2018-12-06
A:水題,不愧是島娘出的題,這麼有“特色”B:對一個數X分解質因子得 X = p1a1 * p2a2 * p3a3 * ... pkak ,X的因子數為 (a1 + 1)*(a2 + 1)*(a3 + 1)*...*(ak + 1);先打了個1...1000000的表,然後直接算的。手賤!忘了模數,後來改過以後丟了好多score。。。C:還以為是推個毛規律,隨便推出來一個掛了。。。T_T,發現有的大神的寫法。直接枚舉 [n-100,
Time of Update: 2018-12-06
這兩道題很類似,先說第一道題。定義dp[i][j]表示根結點為i時,用掉j個士兵得到的最大possible。dp[i][j] = max(dp[i][j], dp[i][j-k] + dp[son[i]][k]);遞迴的求出dp[son[i]][k]的值。最後結果就是dp[1][m];用臨界矩陣存圖。核心代碼:void dfs(int root) { int i, j, k, child, len; vis[root] = true; for(i = tree[root].
Time of Update: 2018-12-06
今天之所以單獨寫這道題的解題報告是想總結一下做這道題的思想。個人感覺做dp的話有時候用兩個小時體會一道題的思想比用一個小時翻解題報告+看題A掉數道題來的有趣。某大神說,思考是一種美德。。。 題意:N分鐘,小剛每分鐘可以選擇是停下休息還是往前走,如果選擇往前走的話可以在第i分鐘走Di,當然,小剛的疲勞值也會增加1。如果選擇休息則小剛的疲勞值會每分鐘減小1,當小剛停下來以後,小剛只能在疲勞值降到0時才能繼續再走。已知小剛的疲勞值最多不能超過M,當小剛度過N分鐘後要保證他的疲勞值為0,問小剛最多
Time of Update: 2018-12-06
Truck HistoryTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 9665 Accepted: 3556DescriptionAdvanced Cargo Movement, Ltd. uses trucks of different types. Some trucks are used for vegetable delivery, other for furniture, or for bricks. The
Time of Update: 2018-12-06
Is there a tree?Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 19 Accepted Submission(s) : 3Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem DescriptionA tree is a well-known
Time of Update: 2018-12-06
據說,矩陣快速冪在遞推式最佳化上相當神奇,而且效率很高。。。 兩矩陣相乘,樸素演算法的複雜度是O(N^3)。如果求一次矩陣的M次冪,按樸素的寫法就是O(N^3*M)。既然是求冪,不免想到快速冪模數的演算法,這裡有快速冪模數的介紹,a^b %m 的複雜度可以降到O(logb)。如果矩陣相乘是不是也可以實現O(N^3 * logM)的時間複雜度呢?答案是肯定的。 先定義矩陣資料結構: struct Mat {double mat[N][N];}; O(N^3)實現一次矩陣乘法Mat
Time of Update: 2018-12-06
很明顯的費用流,不過建圖還是卡住了。。。問的gb才知道怎麼建圖。。。先是源點到n個串,容量是a[i],費用是0,然後是串t中包含的所有不重複字母為一個節點,從這些節點向匯點T連邊,容量是當前字母的個數,費用是0。然後是n個串向T中的字母連邊,容量是a[i]中當前字母的個數,費用是i。 ps:費用流模板有問題。以至於debug了好久。。。T_T View Code //#pragma comment(linker,"/STACK:327680000,327680000")#include
Time of Update: 2018-12-06
第一次做DIV1,果斷爆0。。。弱B的孩子傷不起啊。。。275pt那題調了一上午沒調出來,明顯的傻逼dp就是不會寫。。。T_T參考DD大神的思路:dp[i][j]表示從第i個位置貼一個長度為L的stamp,顏色為j。。。。 View Code class Stamp {public: int dp[N][4]; int cc(char c) { if(c == 'R') return 0; if(c == 'G') return 1;
Time of Update: 2018-12-06
/*建圖用的鄰接表,複雜度O(E*logE)*/struct pnode { int num; int len; pnode() {} pnode(int a, int b) : num(a), len(b) {} bool operator < (const pnode tmp) const { return len > tmp.len; }};int dis[N];bool vis[N];int n;void bfs(int s)
Time of Update: 2018-12-06
記一個KMP演算法的應用,經典的KMP演算法詳解還是看這裡 問題:給一個串,求這個串前i位構成的首碼由多少個子串組成。比如aabaabaabaab,前2位是aa,a重複了2次,前6位是aabaab,aab重複了2次,前9位是aabaabaab,aab重複了3次,前12位是aabaabaabaab,aab重複了4次。先說一下next()函數。pre[i] = j表示 S[1...j] = S[i - j....i];下面討論當i % (i - pre[i]) == 0 時,例如i = 12,
Time of Update: 2018-12-06
可恥的看瞭解題報告。題意:給定一個火車車箱的序列 n(及每個車箱所能容納的乘客),3 個火車頭,及每個火車頭所能拉動的車箱序列 m.求 3 個火車頭所能拉的最多的乘客數.注意:火車頭只能按順序拉,不能跳著拉(如可拉 1,2 或 2,3 或 3,4,但不能拉 1,3/2,4).思路: k表示火車頭(1, 3). i表示第i節車廂,j表示往前退j個車廂(1 <= j <= m && 1 <= j <= i)所以有:dp[k][i] = max(dp[k-1
Time of Update: 2018-12-06
比賽的時候沒仔細看題,感覺挺麻煩的就沒寫。賽後看了一下解題報告。。。其實這題不複雜,考慮出一種情況,剩下的Ctrl + C, Ctrl + V就行。三維滾動數組。f[j][k][l]表示slot x1, x2, x3的值為j,k,l時的最優值。pre[j][k][l]表示他的前一個狀態。ps:發現一個trap。滾動數組f[][][]在給p[][][]傳遞完參數後要置0,否則影響下一次的運算。。。View Code #include <iostream>#include
Time of Update: 2018-12-06
前段時間看了一點網路流,可惜每寫總結。也每複習,所以今天拿過來再看照樣抓瞎。。。這裡好好謝謝總結。幾個基本概念: 1)、殘留網路:一個流網狀圖G = (V, E)中,在不超過容量c(u, v)的條件下,從節點u到v之間可以再壓入的額外的網路流量就是(u,v)的殘留容量。cf(u,v) = c(u, v) - f(u, v); (其中f(u, v)為u到v之間可以再壓入的額外流量)由這些殘留容量最後構成的新的流網路G‘ = (V,
Time of Update: 2018-12-06
01 蛋疼的題,我那種寫法死活不過。。。不知到哪裡出問題了。 優先隊列直接寫就行,注意是雙向邊,另外可能有自環。我想吐嘈HDU蛋疼的__int64 03一道dp題,不過要最佳化,用單調隊列。可以看出若每個狀態只由上一層位置在其左邊的狀態的轉移而來的話: dp[i][j] = min { dp[i-1][k] + pos[i][j] - pos[i-1][k] } + cost[i][j]= min { dp[i-1][k] - pos[i-1][k] } + pos[i][j] + cost[
Time of Update: 2018-12-06
胡伯濤的《最小割模想在資訊學競賽中的應用》中講到了最大密集子圖。而這題是一個很裸的最大密集子圖。。。定義:無向圖G中存在一個子圖G‘,使得G‘中|E|/|V|最大。即:分數規劃,設一個猜想值g,構造一個新函數h(g) = max{sigma(Xe) - sigma(g*Xv)} (Xe屬於邊集,Xv屬於點集)有: 已知:乘以-1得:乘以2化簡得:其中C[V', !V']表示的圖的最小割。所以可以根據如下方式建圖: dv最大為m,所以U = m即可, 1/n <= g <= m/
Time of Update: 2018-12-06
轉載:http://blog.sina.com.cn/s/blog_616694280100f06p.html圖的兩種儲存方式:鄰接矩陣和鄰接表; 兩種遍曆方式:深度優先和廣度優先; 首先以一個結構體儲存一個圖:struct MGraph{ int vertex[maxvertex]; //存頂點 int arc[maxvertex][maxvertex]; //存邊(鄰接矩陣) int
Time of Update: 2018-12-06
黑書上的原文:本節所有的內容都很重要,尤其是例題,決心掌握DP的讀者應當話時間全部掌握。本節的痛點是模型的理解,包括一些難度偏大的題目和動態規劃理論中的一些問題。學習本節之後,應該對每道題目,都能在很短的時間內把思路完整的整理一遍。對於大部分題目,應當能很快的寫出程式。 這裡做幾個約定:1、加上每道題的提交地址。2、每道題唯寫轉移方程和思路,不貼代碼,因為我以後還要再刷。3、個人愚見,大牛無視。 1.5.1 括弧序列 POJ 1141黑書上的經典例題。dp[i][j]表示i
Time of Update: 2018-12-06
裸奔的矩陣乘法,當模板了。#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 2;const int MOD = 10000;struct Mat {long long mat[N][N];void init() {for(int i = 0; i < N; ++i) {for(int j = 0; j < N; ++j)