Time of Update: 2018-12-03
一道簡單的搜尋題,我卻做了兩天,真是失敗,從剛開始,沒有思路,到想到方法,再到如何?,從N次wrong後,到TLE,再剪枝最佳化,最後Accept,可謂一路辛苦,其中也多虧大牛的提示。 題意是把一個大蛋糕(邊長為E),能否切成給定s(s<15)個邊長為Ei(1=<Ei<=10)的小蛋糕,所有的蛋糕都是正方形.題目的規模不是很多,應該是深搜來拼,剛開始一點頭緒也沒有,以前只搜過點。
Time of Update: 2018-12-03
網路蜘蛛現在開源的已經有好幾個了,Larbin,Nutch,Heritrix都各有使用者之地,要做一個自己的爬蟲要解決好多個問題,比如調度演算法、更新策略、分布式儲存等,我們來一一看一下。一個爬蟲要做的事主要有以下這些從一個網頁入口,分析連結,一層一層的遍曆,或者從一組網頁入口,或者從一個rss源列表開始爬rss;擷取每個頁面的源碼儲存在磁碟或者資料庫裡;遍曆抓下來的網頁進行處理,比如提取本文,消重等;根據用途把處理後的文本進行索引、分類、聚類等操作。以上是個人理解哦,呵呵。這些過程中,大約有如
Time of Update: 2018-12-03
題目大意:輸入兩個整數 F 和 V,分別表示花的數量和花瓶的數量,接下來輸入F行V列的表格如下; a[i][j]表示花i放在瓶j裡面的價值;規定把F束花放在V個花瓶裡,使花的相對順序不能變, 即1在2前面,2在3前面......。
Time of Update: 2018-12-03
題意:給你n個硬幣是環狀的,編號1-n,只能翻轉連續的且不超過k個的硬幣。這題有點像nim問題,第一步翻後環必然斷開,但是後面翻轉可能將原來一段的分成兩段。這就有點難想了,但是有個必勝策略,就是你能將這段分成等長的兩段,後面對手怎麼翻,你就在另一段怎麼翻,這樣就可以保證你贏了,這樣的話你會發現當你能翻轉大於1的硬幣時,必能分成兩段。現在就是這樣了,先手先翻,若不能翻完,則後手分段,能分成兩個等長的段就能贏,顯然當只能翻轉1個的時候要特判,這樣就解決了。代碼#include<stdio.h&
Time of Update: 2018-12-03
1001 這個就不用說了吧 1002 簡單的大數 1003 DP經典問題,最大連續子段和 1004 簡單題 1005 找規律(迴圈點) 1006 感覺有點BT的題,我到現在還沒過 1007 經典問題,最近點對問題,用分治 1008 簡單題 1009 貪心 1010 搜尋題,剪枝很關鍵 1011 1012 簡單題 1013
Time of Update: 2018-12-03
中國剩餘定理: 若s分別被di(di必須互質)(0<i<=n)除的餘數分別為ci(0<i<=n),則s=R1*c1+R2*c2+R3*c3+....Rn*cn;其中Ri(0<i<=n)表示dj中(i!=j)的最小公倍數,且Ri%di==1。 若要求滿足條件的最小s,再對(d1*d2*d3..*dn)模數即可。*********************************************題意就是解這個方程:
Time of Update: 2018-12-03
簡介 迭代法也稱輾轉法,是一種不斷用變數的舊值遞推新值的過程,跟迭代法相對應的是直接法(或者稱為一次解法),即一次性解決問題。迭代法又分為精確迭代和近似迭代。“二分法”和“牛頓迭代法”屬於近似迭代法。 迭代演算法是用電腦解決問題的一種基本方法。它利用電腦運算速度快、適合做重複性操作的特點,讓電腦對一組指令(或一定步驟)進行重複執行,在每次執行這組指令(或這些步驟)時,都從變數的原值推出它的一個新值。/**用迭代法求平方根**/#include <stdio.h>int main(
Time of Update: 2018-12-03
歐冠對主場曼聯的比賽進行了11分鐘就已經結束了,由于吉布斯摔的這一跤徹底破滅了阿森納的這個賽季唯一的希望,相繼C羅的進球,我們已毫無希望,我相信全世界的阿森納球迷這一刻都很心痛了。我們不能怪後衛的失誤,只能說上帝不夠眷戀我們。今晚無法入眠,跟06年歐冠決賽一樣,這也注將被銘記。年輕是要付出代價,只希望他們慢慢成熟。阿森納是一個特殊的俱樂部,即使拿不到冠軍也會有很多的球迷,因為這裡有最純粹的而不是有用金錢捧著的足球,這裡有世界上最好的青年軍,有最華麗的表演。這個賽季又0冠了,肯定會有人離開,我們不
Time of Update: 2018-12-03
這題題意是從0到0=<n<=10^9有n個汽車站,現在有0<=m<=10^5輛車,告訴你每輛車經過的站,你只要上了這一輛車,就必須坐到這輛車的終點站,才能下車,求你到第n個車站有多少種乘車方法。設定狀態dp[i]表示到達第i個站的乘車方法,這樣好像不行n<10^9,顯然可以發現狀態轉移就是每輛車的經過車站都可以上車,那麼總站就可以由這個車其他的車站轉移過來,但是由於你只能在終點站下車,所以你上車的地方也只能是下車的地方,下車的地方就10^5可以存的下,顯然dp[i]
Time of Update: 2018-12-03
歸併排序具體可見《演算法導論》——分治法。下例為POJ上2299題,用的是歸併法求逆序數的個數:/** 題目的意思就是要求冒泡排序的交換次數。 所用的演算法:用歸併排序,求逆序數的個數。 ##這道題充分印證了,即使merge本身可能用的不多,但分冶的思想卻是無所不在**/#include <stdio.h>int left[250003], right[250003];long long count;void merge(int* a, int p, int q,
Time of Update: 2018-12-03
研究了一個星期的尾碼數組,過程很痛苦,但還是有很多收穫,付出更收穫真的成正比的。發現尾碼數組的強大功能,需慢慢領會。尾碼數組可以代替尾碼樹巧妙的解決大多數字串問題,其強大功能主要有三個數組: 1.suff[i],存放字串S產生的尾碼數組中排在第i位置,也就是將的n個尾碼從小到大排序後把排好序的尾碼的開頭位置順次放入到suff中。 2.rank[i],rank數組跟suff[i]相對應,suff[i]是排第i的在哪,rank[i]表示第i個開始的字串排第幾,即rank[suff[
Time of Update: 2018-12-03
[匯總]搜尋題目推薦及解題報告(8.28更新)2008-06-28 14:31以前的文章要麼太分散,要麼太淩亂,故現在開始,對每一個分類做一個長期更新的匯總貼。格式說明:題目名後面列出個人此題的大致難度(對菜鳥而言)POJ 1069 -The Bermuda
Time of Update: 2018-12-03
題目連結:http://acm.pku.edu.cn/JudgeOnline/problem?id=1222題目大意:給你一個5行6列的矩陣分別表示30個燈,矩陣map[i][j]=1表示燈亮著, =0表示燈沒亮。要求你輸出解決方案 press[][],press[i][j]=1表示按一下,=0表示不按。使得最後狀態為所有燈都熄滅。 首先找出其中的一些規律:(1)第2次按下同一個按鈕時,將抵消第1次按下時所產生的結果。因此,每個按鈕最多隻需要按下一次;
Time of Update: 2018-12-03
昨天比賽的時候碰到了帶負權的單源最短路徑的題目,沒做出來,Dijkstra不可以求帶負權的最短路。學習了一下Bellman-ford演算法。 Bellman-ford演算法可以在O(VE) 的時間內求出帶負權的單源最短路(除存在負權迴路),而且可以判斷圖中是否存在負權迴路。我覺的Bellman-ford演算法的關鍵點在於在一個|v
Time of Update: 2018-12-03
排序都用Qsort了,別的排序演算法不怎麼用,但有些排序的思想很重要。碰到一道求逆序對的題,要用到歸併排序,學習了一下歸併排序。歸併排序是用分治思想,分治模式在每一層遞迴上有三個步驟: 分解:將n個元素分成個含n/2個元素的子序列。 解決:用合并排序法對兩個子序列遞迴的排序。
Time of Update: 2018-12-03
主要思想就是:先排序(按行號升序,若行號相等就按列號升序);再枚舉每兩個點,以兩個點分別為青蛙所走路線上的第一個點和第二個點(在枚舉的過程中的剪枝非常重要);// 枚舉 + 剪枝#include <stdio.h>#include <stdlib.h>int R, C, map[5001][5001];typedef struct{ int x, y;} COORD;COORD a[5001];int compare(const void* a,
Time of Update: 2018-12-03
非MFC程式TRACE和ASSERT宏的一種實現方法 收藏 我們知道TRACE和ASSERT宏是MFC架構程式內建的。但是要在非MFC程式中使用這兩個宏,我們怎麼實現呢。這裡給出一種實現的方法。將這兩個宏在debug.h檔案中實現。程式包含這個標頭檔就可以了。標頭檔及說明如下: #ifndef _DEBUG_H_#define _DEBUG_H_#ifndef __AFX_H__#define _T(x) x#if defined _DEBUG#include <stdio.h&
Time of Update: 2018-12-03
一個不錯的Bfs,它的價值在於狀態的儲存,做這道題就是為了學習如何用位儲存狀態。雖然看了網上的思路,也算入了門吧! 題目的意思: 給定一個4*4格的棋盤,每一個格子是黑的或者白的,現在有一個規則:每當把一個格子變成它相反的顏色,那麼相鄰的格子(上下左右)的顏色也將變成它與原來相反的顏色。那麼,給出一種演算法,對於一個給定的棋盤,把它的格子全部變成白色或黑色。 直接BFs就可以,其中關鍵是狀態的儲存,可以用1表示黑色,0表示白色。則一個狀態可以用16位2
Time of Update: 2018-12-03
用二維數組state[C][fuel], 表示在城市C油量為fuel時的最小代價. 怎樣在一個節點上進行狀態轉移? 1. 把該節點的油量加1, 以供繼續拓展. 2. 直接到其他可達節點. 注意: 1. 應使用優先隊列(最小堆)最佳化搜尋速度. 2. 用鄰接表表示一個節點所有相鄰的節點, 效率更高. #include <iostream>#include <cstring>#include <cstdio>#include <queue>using
Time of Update: 2018-12-03
湖大3,4月比賽結束了,輸的很慘,感覺很失望,一共A了三題,實在不好意思說出來,記得第一次月賽的時候,沒什麼壓力,就是去開開眼界,也做了兩道,現在越菜了。題目不是很難,還是基礎沒打好,總不想做水題,才導致今天的悲慘下場。三月月賽的時候剛開始拿到題時,看了第一題,覺得就是Dijkstra,求最短路的條數,就敲了了,我是用Dfs求路徑條數的(大牛莫笑),一直TLE,沒辦法,看了一下rank發現E題過的人比較多,就去看題,題目不難,就寫了,可不是runtime