HDU-1396 神奇的三角形。坑!

看似簡單的題,卻深藏殺機!這題一看就是遞推題,我以向很喜歡這類型的題,這題非常容易著手。由於這類型題很容易找規律。比如這題。先看正立的三角形。畫一圖就可以得出f(n)=f(n-1)+2n-1+n*(n-1)/2;先前以為就可以水過了。答案卻WA!。重新畫一個圖,終於發現原來還有倒立的三角形。從第4個就出現了一個,第五個出現3個(前一個,後兩個),第六個出現了7個(多了一個倒立的)依次下去。會發現,偶數比奇數先多一個。代碼寫起來非常棘手啊。不知牛人這麼推出來的。一個公式就A了,不解啊!。#incl

poj-2478 求前n個歐拉函數值的總數(模板)。

題目串連分析:  此題只是換了一種形式提出問題的,實際可以把分數看成一對互質的數。那麼要我們求得是:前n個數每個數的歐拉函數值的總數。歐拉函數是:數(n)與前n-1個數互質的個數。這題就是個模板題,沒什麼可解釋的。代碼:#include<stdio.h>#define M 1001000typedef long long LL;int vis[M]={0};int prime[M/3],phi[M];LL sum[M];void PHI()

HDU1013-簡單的數論

題意:就是把數的每個位元相加,看是否小於10,是就輸出,否則繼續。分析:本題不難,讓我們做了是為了讓我們知道一個結論。一個數(n)的樹根k=(n-1)%9-1;知道這個這題就是水題了。不知道也沒什麼關係,也可以水過。(輸入的數可能很大)知道就這個代碼:#include<stdio.h>#include<string.h>int main(){ char st[1005]; int r,len;

poj3670,LiS(二分尋找)

如果熟悉LIS問題,這題基本上可以說是水題了。稍微改了點。相同可以認為是上升的。然後就是正反求最長上升子序列。代碼:#include<stdio.h>#include<string.h>int dp[30010],N;int a[30010],b[30010];int search(int n,int m){int i=1,j=n,mid;while(i<=j){ mid=(i+j)>>1; if(m=>dp[mid])

HDU-1251,字典樹

一道典型的字典樹問題。字典樹有叫首碼數,這題不用它才怪。字典樹很簡單,三個基本的操作,建立字典樹,插入,查詢。知道怎麼建和用,就可以A了。#include<cstdio>#include<cstring>using namespace std;struct tire{int num;tire *next[26];tire(){num=0;memset(next,0,sizeof(next));}};tire *root=new tire;void insert(char

poj-1258 Agri-Net

這類題目做多了,簡直就是水題。很直接的一個prim演算法。不必多解釋。#include<stdio.h>#include<string.h>const int Max=0xffffff;int main(){int i,j,n,k;int a[100][100],w[100]; while(~scanf("%d",&n)) { memset(a,0x3fff,sizeof(a));memset(w,0x3fff,sizeof(w));for(i=0

poj2533,LIS問題(n^2)

做了LIS問題,嘗試去A一些水題。正好這是一點典型的LIS問題。本題沒什麼限制,O(n^2)的演算法完全可以過。代碼:#include<stdio.h>int main(){int i,j,n;int dp[1005],a[1005];while(scanf("%d",&n)!=EOF){ int max=1; for(i=0;i<n;i++) scanf("%d",&a[i]); dp[0]=1; for(i=1;i<n;i++) { dp[

poj3041-二分圖最大匹配

串連有關二分圖分析題目:串連就知道了行和列分別看成兩個集合,子彈看成邊就行了,一個典型的模板題。代碼如下:#include<stdio.h>#include<string.h>bool used[505];int map[505][505];int match[10005];int n;bool find(int i){for(int

poj2250-列印單一LCS路徑。

題目串連題意:就是一個最長公用子序列。並列印其路徑。分析:最長公用子序列還不難,注意是列印它的一條路徑。我們知道是用二維數組dp來儲存它的匹配數。一旦有匹配的它就修改後面的值,保證了如何一個狀態當前的dp資料中是最大的值。看一張經典的圖:顯示了路徑的回溯。協助我們能找到匹配的的過程。為了記錄它轉移的方向。我們需要用輔助數組map來記錄它是有那個狀態轉移而來的。可以用遞迴來實現。代碼如下:#include<cstdio>#include<cstring>//using

HDU-4477滾動數組+遞推(整數分解)

題目串連題意:給定繩子的長度,只可以把繩子剪成任意長度為整形的且彼此不相同,問有多小種不同剪的方案。比如 4=1+3。5=1+4. 5=2+3。6=1+2+3. 6=1+5. 6=4+2。分析:首先,我們可以發現,一個大於2的整數,可以分成一個最多的連續自然數相加,並且,一個大於2的整數至少可以分成2個不相同的整數相加,方案數為(n-1)/2。如果用a[i][j]表示第i個數分解成j個數相加的方案數。那麼就有a[i][j]=a[i-j][j]+a[i-j][j-1],代碼如下:#include&

poj-1469,1274 二分圖匈牙利演算法

題目串連題意:學生有各自喜愛的課程,所以對於一個課程可能存在多個學生喜歡它,但我們想要沒門課程都有人選。第一個資料,代表測試的個數,接下來是課程p個,學生n個,在接下的p行裡,一次代表課程1,2...p,每行 i

poj1934-列印LCS全部路徑+搜尋

題目串連題意:列印全部LCS路徑,並按照字典順序輸出。本題比較難。參考神人代碼稍做改進如下:#include <stdio.h>#include <string.h>#include <math.h>#include <string>#include <set>using namespace std;const int N=100;set<string> SET;char s1[N],s2[N],temp[N];int

poj1942-組合數學

題目串連題意很清晰,就是算出從一個對角線到另一個對角線有多小走法(只能向上,向右走)。分析:一個矩陣,它有行有列,要到達對角線,必定有通過所有的行和列,那麼存在兩種情況,當行(n)==列(m),即剛好走完列和行,在m+n個裡選m或n個組合得C(m+n,m)或C(m+n,n)。當兩者不相等,就要看那個先到,所有最小的必定先到達。另外資料應用unsigned型,它比int型儲存的數要大1倍。代碼如下:#include<stdio.h>int main(){ double

poj1050-最大子矩陣和

題目串連題意:給出N*N的矩陣,求它子矩陣的最大和。分析:這題是最大子序列和的一個擴充。關鍵是怎樣用單一的子序列來求矩陣。目前沒想到什麼高深的演算法。只有枚舉了,只是小小的dp。先求出矩陣一行,相當於求最大子序列和,再次求兩個合并的,三個合并的,一直到n個。時間複雜度為(n^3)不過這題資料不大。完全可以A了。代碼:#include<stdio.h>#include<string.h>int a[105][105]; int max_sum(int n,int

HDU2222-tire,AC自動機

好吧!為了以後複習,也為了與大家分享!我把書上的簡介打到這裡.基本概念:AC自動機是一種特殊的自動機,是通過在tires樹上添加一些額外的邊組成,其核心部分是尾碼節點的構建。演算法:AC自動機的構建分兩步,首先通過所有的模式串建立起tire樹,然後從樹根向下一次計算每個節點的尾碼節點。AC自動機尾碼的建立過程和kmp演算法中next數組的求解過程十分相似,這裡我們也用next數組來表示節點i對應的後節點的標號,fa[i]表示節點i在tire樹上的父節點,此外假設從fa[i]到i的那條邊上的字元是

poj2635-大進位轉化+同餘定理+素數篩選

題目串連這題不知wA多小次了,先是打素數表逾時,後是取餘數逾時。沒法,在絕望的情況下看了大牛的,我無語了。。。。。題意:(英語基礎不行,題意都很坑爹)。給你一個數,它是由兩個素數相乘而得的,再給你一個數M,如果其中有一個素數小於該數M,就輸出“BAD”,並且要輸出該素數。只有兩個素數都它大於這數M,才輸出“GOOD”。(這題目廢話真多!,何必呢?)分析題目: 一看到素數,就想到了打素數表,這是解決這題的第一步,但怎樣快速呢,又是一個麻煩事。另外,平時我們用的數都是十進位的數。所以,這題就要坑你,

poj1251-Kruskal演算法

The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some years ago. But the jungle overtakes roads relentlessly, so the large road network is too expensive to

爬天梯-遞迴方程(類似整數分解)

題目串連題目分析:這題是一道常規題,看似把數分解,有多種可能,其實與走台階是相通的,如果一個最多能跨過兩個階梯,那麼要走完n個階梯,有多種可能,高中這題是在計數原理裡面的,非常簡單,看看思路,你就非常明白了:推理:不管你中間怎樣走,最後只有兩種可能,要麼最後一步只剩下一個台階,要麼剩下兩個台階。假設前面有f(n-1)和f(n-2)種。那麼就有:                          f(n)=f(n-1)+f(n-2)這是最多走兩個台階,若能走i個台階,沿著這條思路,推廣到i個就有:

poj1287-Kruskal和prim演算法。

學了這兩種演算法,總覺得還沒完全體會,體會兩種方法的不同,我個人喜愛用Kruskal演算法,因為它不像prim演算法那樣還要初始化,for語句也要小一些,看起來比prim演算法更整潔。下面以poj1287為列:DescriptionYou are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and

博弈?水題?說不過去。。。

題目串連分析;這題果然坑爹,水題竟然全然不知,還搞什麼遞推,搞什麼博弈?,簡直就是小題大做了。這題比較適合小學生人做,因為他們會一個一個地來枚舉,發現一些規律。這題果然就有規律了。1 2 3 4 5 6 7 8 9 A A B A A B A A B 這題出的沒水分。這個博弈只能用來騙小孩。#include<stdio.h>int main(){int n; while(scanf("%d",&n)!=EOF){if(n%3==0)puts("Bob");elseputs("

總頁數: 61357 1 .... 19205 19206 19207 19208 19209 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.