【字串迴圈同構的最小標記法】

迴圈字串的最小標記法的問題可以這樣描述:對於一個字串S,求S的迴圈的同構字串S’中字典序最小的一個。由於語言能力有限,還是用實際例子來解釋比較容易:設S=bcad,且S’是S的迴圈同構的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。對於字串迴圈同構的最小標記法,其問題實質是求S串的一個位置,從這個位置開始迴圈輸出S,得到的S’字典序最小。一種樸素的方法是設計i,j兩個指標。其中i指向最小表示的位置,j作為比較指標。令i=0,j=1如果S[i] >

【字串最小表示】HDU 3374

http://acm.hdu.edu.cn/showproblem.php?pid=3374原來這個東西叫最小表示。。。方法:分別求一次最小表示和最大表示求出首字母位置,然後下面就比較暴力,用兩次kmp求出最大串和最小串出現的次數#define N 1000010char str[N],ss[N*2],lin[N];int p[N];int Minrp(char *s, int l){//最小表示 int i = 0, j = 1, k = 0, t; while(i < l

【分組背包每組至少一個】HDU 3033

int dp[11][10010];struct node{ int w[101],val[101]; int cnt;}p[11];int main(){ int n,m,k; while(scanf("%d%d%d",&n,&m,&k) != -1){//總共數量,手上金錢,鞋子種類 int i,j; for(i=1;i<=k;i++)p[i].cnt=0; while(n--){

【字串最小表示】HDU 2609

http://acm.hdu.edu.cn/showproblem.php?pid=2609對每個串都求出最小表示的串,sort一下,暴力一下。。。A了#define N 10005char str[N];struct node{ char s[1000];}ss[N];bool cmp(node a,node b){ return strcmp(a.s,b.s)<1;}int Minrp(char *s,int l){ int i=0,j=1,k=0,t;

【二維費用背包】HDU 2159

#define N 101int dp[101][101];//殺i只怪忍耐度為j的最大經驗int a[101],b[101];int main(){ int n,m,k,s; while(scanf("%d%d%d%d",&n,&m,&k,&s) != -1){//還需的經驗值,保留的忍耐度,怪的種數,最多的殺怪數 int i,j; for(i=0;i<k;i++){ scanf("%d%d",

【有根樹的同構】ZOJ 1990/POJ 1635

有根樹的同構的意思就是兩棵樹的形狀一樣,子樹可以旋轉,因此,當子樹的子節點數相同就可以判斷同構不用建樹,只需要利用dfs時遇到'1'的時候回溯就行,開一個數組hash[i] = j表示子結點數為i(包括自己)的結點為j個0ms無壓力int hash[801];//hash[i] = j表示子結點數為i(包括自己)的結點為j個int get1(){ int n = 1; char c; while((c=getchar())=='0'){

【背包】POJ 1882

題目有點囉嗦,說白了給出一個上限s,n套郵票,每套有m張面值為ai的郵票,問不超過上限的前提下能組成最大的連續面值和(從1開始)。dp[N]:組成面值為i的最小郵票數量+完全背包,更新幾個記錄值#define N 1100int dp[N];//組成面值為i的最小數量int a[12][12];int main(){ int s; while(scanf("%d",&s) && s){ int i,j,k; int n;

【狀態壓縮DP】POJ 1170

題意:一個商店提供多種商品,當使用者單獨購買商品時有一個價格,當使用者組合購買時可以獲得優惠,現在提供多種優惠方案和需要購買的物品總數,問最大的優惠是多少。輸入27 3 28 2 521 7 3 52 7 1 8 2 10表示有 2 種商品,編號分別是 7 和 8,分別要購買的數量是 3 和 2,2 和 5 是它們的單件購買價格。接下來是 2 種優惠。第 1 種優惠有 1 種商品:3 個 7 號商品價格為 5,第 2 種優惠是 2 種商品:1 個 7 號商品和 2 個 8 號商品價格是

【Krusual求偽森林】HDU 3367

http://acm.hdu.edu.cn/showproblem.php?pid=3367根據題目的定義,偽森林就是一個子圖最多隻有一個環,題目問權值最大的偽森林。方法:把Krusual變形,記錄以i為根的樹是否已經有環,再分情況把樹接上#define N 10005#define M 100005int n,m;struct node{ int u,v; int w;}e[M];bool cmp(node a,node b){ return a.w>b.w;}int

【LCA+樹形DP】POJ 3417

參考了該blog的思路http://www.cppblog.com/Yuan/archive/2010/07/11/120101.html,orz...........#define N 100010struct edge{ int v; int len; int next;}e[2*N];int ecnt;int head[N];bool vis[N];int n;int R[N];int p[N*2];int dep[2*N];int dp[20][2*N];int

【斜率最佳化dp】HDU 2993

第一道斜率最佳化dp,看著別人的報告做的,做之前建議看一下04年周源的《淺談數形結合思想在資訊學競賽中的應用》論文         http://wenku.baidu.com/view/f6421ce8b8f67c1cfad6b8ac.html斜率最佳化其實就是把每個狀態看作直角座標繫上離散的點抽象出x,y 表示斜率 (y2 - y1) / (x2 - x1)

【樹狀數組求第k小+並查集】POJ 2985

http://poj.org/problem?id=2985樹狀數組已經夠神奇了,原來它還可以求第k小的元素........orz,位元運算V5!#define N (1<<20)int c[N],rank[N],fa[N];int n,m;void init(){ int i; for(i=1;i<N;i++){ c[i] = 0; fa[i] = i; rank[i] = 1; }}int lowbit(int

【二維樹狀數組】POJ 1195

求和的時候注意容斥原理ans = sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);#define N 1100int c[N][N];int lowbit(int x){ return x&(-x);}void add(int i,int j,int x){ int tmp; while(i<N){ tmp = j; while(tmp<N){ c[i]

【博弈題目】

poj-2234:poj-2484:poj-1704:poj-1067:poj-2505:poj-3480:poj-1740:poj-2348:poj-1082:poj-2960poj-2425poj-2505poj-2311:hdu2147 篩法找規律。1850 SG和的簡單應用,注意異或和括弧的優先順序。1536 SG函數、SG和的定義式應用。SG最大為集合元素數(因為其有最多集合元素數個子節點)1527 Wythoff Game 兩數比為黃金分割率 2516 Dynamic

計算三角形面積

方案一:三角形面積=底*高/2。方案二:三角形面積=sinA*b*c/2.sinA=sqrt(1-cosA*cosA);cosA根據餘弦定理:CosA=(c^2+b^2-a^2)/2bc;缺點:中間因為浮點型的轉換,浮點型相除,開根號,造成誤差偏大。方案三:海倫公式S=√[p(p-a)(p-b)(p-c)]   而公式裡的p為半周長:

【樹狀數組求第k小】POJ 2892

又一次用到樹狀數組求第k小,注意邊界情況#define N 50005int c[N];int lowbit(int x){ return x&(-x);}void add(int x,int v){ while(x<N){ c[x]+=v; x+=lowbit(x); }}int sum(int x){ int ans = 0; while(x){ ans+=c[x]; x-=lowbit(x)

【dp】Codeforces Beta Round #2 B

http://codeforces.com/problemset/problem/2/B分別對2和5dp,取最小的,注意有0的情況,如果最後2和5最小值ans>=1時就走0,否則走2、5,至於路徑我就用比較方便的方法:對每一點記錄前一點的座標寫得有點搓.......#define N 1005int dp[N][N][2];int n;bool zero;struct node{ int x,y;}p[N][N][2];string out(int id){ string

叉積的作用

在三維向量空間中 , 假設a和b是兩個向量, 那麼它們的叉積c=aXb可如下嚴格定義。  (1)|c|=|a×b|=|a||b|sin<a,b>  (2)c⊥a, 且c⊥b,  (3)c的方向要用“右手法則”判斷(用右手的四指先表示向量a的方向,然後手指朝著手心的方向擺動到向量b的方向,大拇指所指的方向就是向量c的方向)。叉積的一個非常重要性質是可以通過它的符號判斷兩向量相互之間的順逆時針關係: 若 P × Q > 0 , 則P在Q的順時針方向。若 P × Q < 0 ,

【bfs優先隊列】POJ 2312

char g[333][333];int n,m;struct node{ int x,y; int step; friend bool operator <(node a,node b){ return a.step>b.step; }};node st,end;bool vis[333][333];int d[4][2] = {0,1,0,-1,1,0,-1,0};int bfs(){ int i,j,k;

【bfs優先隊列】POJ 3635

http://poj.org/problem?id=3635#define N 1005struct node{ int u; int len;};vector<node> v[N];int n,m;int price[N];void add(int a,int b,int w){ node tmp; tmp.u = b; tmp.len = w; v[a].push_back(tmp); tmp.u = a;

總頁數: 61357 1 .... 13159 13160 13161 13162 13163 .... 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.