做法和上一篇的那個題一樣,每次刪掉一個點把相應的面積加上即可,不過細節問題折騰了我一個下午,所幸AC了,不過代碼已使我目不忍視了。刪點的時候需要考慮左右交界處要加上的是一個三角形還是兩個三角形 ,各種細節改天附圖說明,今天已經廢了貼上代碼,有少量debug用的資料/* 0 0 -1 0 0 -1 2 0 -2 1 0 4 1 0 0 3 3 2 5 1 2 2 1 3 0 2 3 0 1 0 0 1 1 2 0 4 1 0 0 2 1 2 2 2 2 4 6 8 0 1 1 0 2 0 3 0
http://acm.hdu.edu.cn/showproblem.php?pid=4374題意:很簡單,不廢話了- -在這道題中單調隊列的作用:線上性時間內維護定長區間的最值。單調隊列沒學過的話去學一下這題吧轉移的時候dp[i][k]->dp[i+1][j],k與j的差距不超過T,分兩種情況轉移,k在j的左邊和右邊,所以維護T長度的最值,雙向掃一遍就OK了
題目大意:秘銀島上有一些硬幣,這些硬幣為1,4,9,……17^2的面值,拿某個面值,求解有幾種拿法。輸入N:2 10 30 0 輸出OT:1 4 27典型母函數。數學分析之。公式為n=g(ot)=(1+x+x^2+x^3+...x^n)(1+x^2+x^4+x^6....x^n)(1+x^17.....+x^17n),題目最大到300就停了,因為求平方畢竟很耗時間。可用數組存下不同的餘額(面值就是累加增長值),那一句稍微懂了點。。雖然一迴圈眼暈。。
來源:點擊開啟連結終於把BFS看水了,包括路徑最佳化和奇偶剪枝。一年了也就看明白了這點東西,so sad。。。。#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;int visited[205][205];char mat[205][205];int n,m;int dir[4][2]={-1,0,1,0,0,1,
題目:點擊開啟題目連結巧妙的貪心。這個問題講了一個沙王(就是DOTA裡面的那貨)要搬家,他有一個V大小的洞,M件裝備,每件裝備有兩個屬性,Ai是永久佔用的空間,搬過來就佔了,Bi是臨時佔用空間,除了滿足洞>=Ai外,還要滿足搬這件裝備時,洞裡的大小大於等於Bi。問能否搬完。貪心的形式已經很熟了,但這個題的貪心排序開始排序的時候,是按Ai>Bi來排序的,結果WA。想了想,Bi事實上是在搬完後就移除的,於是按Ai+Bi>A2i+B2i排,依然錯誤。後來再仔細一想,應該是讓A的永久空
http://acm.hdu.edu.cn/showproblem.php?pid=4353題意:給你n個點,m個雷找一個多邊形,使得多邊形的面積除以這個多邊形內雷的個數的比值最小仔細想想,其實就是找一個比值最小的三角形就OK了,因為其他的三角形的比值都比它大,組合成多邊形後勢必會將比值變大所以可以直接暴力O(n^3)枚舉三角形,再計算三角形內的雷的個數求比值即可雷得個數的話預先處理一個數組吧,畫張圖就懂了cnt= (i k上方的點 )- ( i j上方的點 + j k上方的點)
來源:點擊開啟連結求有向圖的網路流,DINIC模板過,稍作修改即可。DINIC還是非遞迴版比較好的,省時間。// 1.設定上限MAXN和MAXN 2.初始化數值src, des, nNode 3.init_adj() & ex_addEdge() 4.dinic()#include <cstdio>#include <iostream>#include <cstring>#include <string>#include
http://acm.hdu.edu.cn/showproblem.php?pid=4336題意:有n種卡片,吃零食的時候會吃到一些卡片,告訴你在一袋零食中吃到每種卡片的機率,求搜集齊每種卡片所需要買零食的袋數的期望。分析:n比較小,很自然的想到狀態壓縮DP再分析一下轉移過程的遞推式就ok了假設S狀態中為1的數位表示還沒有拿到的卡片,那麼每次可能會拿到這其中的某一張卡片,也可能拿到原來已經拿到的卡片,還可能一張卡片也拿不到後兩種情況的狀態不變。dp[0]=0;(表示每一種卡片都取完了,期望當然是
http://www.lightoj.com/volume_showproblem.php?problem=1140題意:一個人依次寫下從m到n的數,問你會寫下幾個‘0’普通的按位DP,預先處理一個數組記錄長度為i的數中首位為j時共有幾個0統計的時候寫暈了,竟然忘記了某個數本身的0帶來的影響,上次做過一個類似的題目,詢問的是二進位位元上的0 和 1,這次是十進位,差不多的#include<cstdio>#include<cstring>#include<cmath&
http://www.lightoj.com/volume_showproblem.php?problem=1231http://www.lightoj.com/volume_showproblem.php?problem=1232http://www.lightoj.com/volume_showproblem.php?problem=12331:題意:給你n個物品的體積和數量,讓你求有多少種組合能恰好裝滿M體積的背包開始一直在想怎麼用一維數組來捉,弄了半天沒什麼結果。所以迴歸一般的DP,dp
連結: http://www.lightoj.com/volume_showproblem.php?problem=1423題意簡化後就是:有大概30條跑道,每條跑道上長為50000,(以上都是資料的最大範圍),每條跑道上有一些位置放了欄架,每條跑道的欄架個數不超過5000,求最長的一段區間,使得這個區間內的每條跑道的欄架個數相等。咋一看,毫無思路啊,難道說要去枚舉區間長度,5000啊,還要枚舉起點終點,鐵定不行,然而分類裡面是雜湊-
來源:點擊開啟連結更加標準的模板題,幾乎所有OIER和ACMER的培訓上都講過類似的例子,什麼配對強盜然後看分幾波。。配對敵人看看有幾方勢力。。配對物品發現有幾種。。之類的云云,一概屬於並查集。。。再去看看狀態壓縮。。ORORZ。。我看的課件是OIER的PAS版。。。。。。。。。。高中生IMBA#include <cstring>#include <iostream>#include <stdio.h>using namespace std;int
來源:點擊開啟連結這個題目也不是很複雜。一隻蝸牛,白天上升一些,晚上下滑一些,每天會因為沒有力氣而比上一天少爬,求這個蝸牛幾天滑到底或者幾天滑到頂。簡單類比即可,如果用數學反而麻煩。另外當這個蝸牛上升比下降還快的時候,其實就已經不行了= =##include <iostream>#include <string>using namespace std;int main(){double high,up,down,factor;while(cin>>high&
連結:http://acm.hdu.edu.cn/showproblem.php?pid=4358給你一棵樹,每個節點有一個點權,然後有一些詢問,求以某個點為根的子樹中有多少的數出現了k次首先還是老方法,先轉換成線性序列,每個節點對應一個區間,然後離線操作,每個詢問都對應這一段區間,相當於詢問一段區間內出現k次的數的個數,將所有詢問的區間按照右端點排序,然後用線段樹來做,線段樹的第j個數代表[j,i]間出現k次的數的個數,記錄下每個數出現的所有位置,當這個數出現k次的時候【1->這個數第1
題目:點擊開啟連結建議初學STL的人用MAP來切這道水題,可以對MAP的方便之處有更加深刻的理解。因為調用和尋找的確挺簡單的。效率據查閱資料,是lgN.#include <iostream>#include <map>#include <string>using namespace std;int main(){int ballnum;while(cin>>ballnum && ballnum!=0){string
http://www.lightoj.com/volume_showproblem.php?problem=1018題意:給你n個座標點(n<=16),問你最少劃幾條線能穿過所有的點做法:1:n很小,目測應該是狀態壓縮DP2:劃一次線至少會經過兩個點(要不然就太虧了),所以可以枚舉兩個點,預先處理兩個點所在直線所經過的點集的狀態(dp[i][j])3:然後就可以記憶化搜尋了,每次從s狀態中枚舉兩個點所在的直線去掉直線上所有的點#include<cstdio>#include&l
剛好最近回趟家,剛好將要複習,要總結,要學習的東西整理一下,先掛在這兒1:數位DP,最近被這類題虐了幾次,發誓一定要搞定這類題2:單調隊列+斜率最佳化的DP3:左偏樹總結4:尾碼數組總結5:半平面交總結(主要都是模板的東東)6:做做經典的矩陣乘法的題目(真太水了)7:複習AC自動機8:學習高斯消元 (弱爆了,連這個都沒學)9:圖論的東東,做個總結10:最後集中訓練計算幾何區預賽,我來了!!!
今天看了下母函數,不太懂。再看,似乎微懂了點。首先,他們的題都是差不多的,求種類、求方案數,幾分硬幣有幾個之類的。
嘗試著用最簡單明了的方法解釋。。。問題:給你一幅圖,求起點到終點的最短路徑。做法: 假設d[i]表示起點到i的最短路徑,那麼我們的目的就是求出所有的d[i],然後輸出 d[終點]。一開始我們先設所有的d[i] = inf(一個很大的數) ,然後開搞。首先,我們邁出我們勇敢的第一步,d[s] = 0,(s為起點),
連結:http://www.spoj.pl/problems/QTREE/http://poj.org/problem?id=3237題意:一棵樹,兩種更新操作,改變一條邊的邊權,將a