日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

9月——都已经9月了还不好好刷题?。。

發布時間:2025/4/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9月——都已经9月了还不好好刷题?。。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 UVALive4513 (字符串hash

題目:在一個串中找到至少出現m次的最長的串。 思路:直接hash,然后二分答案。 /* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio(false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxl=4e4+300; const ull hash1=123; int m; char s[maxl]; ull H[maxl]; ull xp[maxl]; ull gethash(int i,int L){return H[i]-H[i+L]*xp[L]; } int len; map<ull,vector<int> > mp; map<ull,int> cont; map<ull,vector<int> >::iterator it; ull val[maxl]; bool check(int l){for(int i=0;i<len-l+1;i++){val[i]=gethash(i,l);}sort(val,val+len-l+1);int c=0;for(int i=0;i<len-l+1;i++){if(i==0||val[i]!=val[i-1]) c=1;if(val[i]==val[i-1]) c++;if(c>=m) return true;}return false; } void getans(int l){mp.clear();for(int i=0;i+l<=len;i++){mp[gethash(i,l)].pb(i);} } void init(){xp[0]=1;for(int i=1;i<maxl;i++){xp[i]=xp[i-1]*hash1;} } int main(){freopen("/home/files/CppFiles/in","r",stdin);init();while(cin>>m,m){scanf("%s",s);len=strlen(s);H[len]=0;for(int i=len-1;i>=0;i--){H[i]=H[i+1]*hash1+(ull)s[i];}int l=0,r=len+1;while(r-l>1){int mid=(r+l)/2;if(check(mid)){l=mid;}else{r=mid;}}if(l==0){puts("none");continue;}getans(l);vector<int> pos;for(it=mp.begin();it!=mp.end();it++){if(it->se.size()>=m){sort(it->se.begin(),it->se.end());pos.pb(it->se.bk);}}sort(pos.begin(),pos.end());printf("%d %d\n",l,pos.bk);}return 0; } View Code

?2 POJ 3613 (經過k條邊的最短路

思路:floyd+倍增(快速冪思想)

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio(false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=1005; int N,T,S,E; int mp[maxn][maxn]; int dis[maxn][maxn]; int tmp[maxn][maxn]; int v[maxn]; int num=0; void setINF(int a[][maxn]){for(int i=0;i<num;i++){for(int j=0;j<num;j++){a[v[i]][v[j]]=INF;}} } void cp(int a[][maxn],int b[][maxn]){for(int i=0;i<num;i++){for(int j=0;j<num;j++){a[v[i]][v[j]]=b[v[i]][v[j]];}} } void floyd(int dis[][maxn],int a[][maxn],int b[][maxn]){for(int k=0;k<num;k++){for(int i=0;i<num;i++){for(int j=0;j<num;j++){if(dis[v[i]][v[j]]>a[v[i]][v[k]]+b[v[k]][v[j]]){dis[v[i]][v[j]]=a[v[i]][v[k]]+b[v[k]][v[j]];}}}} } void solve(){while(N){if(N&1){setINF(tmp);floyd(tmp,dis,mp);cp(dis,tmp);}setINF(tmp);floyd(tmp,mp,mp);cp(mp,tmp);N>>=1;} } bool used[maxn]; int main(){freopen("/home/files/CppFiles/in","r",stdin);cin>>N>>T>>S>>E;for(int i=0;i<maxn;i++){for(int j=0;j<maxn;j++){mp[i][j]=INF;}}for(int i=0;i<T;i++){int a,b,l;scanf("%d%d%d",&l,&a,&b);if(!used[a])v[num++]=a,used[a]=1;if(!used[b])v[num++]=b,used[b]=1;if(mp[a][b]>l){mp[a][b]=l;mp[b][a]=l;}}setINF(dis);for(int i=0;i<num;i++) dis[v[i]][v[i]]=0;solve();printf("%d\n",dis[S][E]);return 0; } View Code

3 CodeForces 25E(kmp

題目:給出三個字符串,求包含這三個字符串的字符串的最小長度。

思路:三個字符串全排列一下,計算前一個字符串和后一個字符串的最大重疊部分長度??梢杂脻L動hash或者kmp。kmp雖然是從頭開始匹配的,但是最后得到的狀態肯定是最大的匹配長度,所以可以只要看最后的狀態就行了。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ */ #include <bits/stdc++.h> #define pb push_back #define se second #define fs first #define sq(x) (x)*(x) #define eps 0.000000001 #define LB lower_bound #define IINF (1<<29) #define LINF (1ll<<59) #define bk back() #define PB pop_back using namespace std; typedef long long ll; typedef pair<ll,ll> P;const int maxl=1e5+3000; char s[3][maxl]; int len[3]; int f[3][maxl]; void getFail(char *p,int *f){int m=strlen(p);f[0]=-1;f[1]=0;for(int i=1;i<m;i++){int j=f[i];while(j&&p[i]!=p[j]) j=f[j];f[i+1]=(p[i]==p[j]?j+1:0);} } int getmax(int x,int y){int i=0,j=0;while(i<len[x]&&j<len[y]){if(j==-1||s[x][i]==s[y][j]){i++,j++;}else{j=f[y][j];}}return j; } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);for(int i=0;i<3;i++){scanf("%s",s[i]);len[i]=strlen(s[i]);}for(int i=0;i<3;i++) getFail(s[i],f[i]);int ans=0;for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(i==j) continue;for(int k=0;k<3;k++){if(i==k||j==k) continue;int tmp=getmax(i,j);if(tmp==len[j]){tmp+=getmax(i,k);}else{tmp+=getmax(j,k);}ans=max(ans,tmp);}}}cout<<len[0]+len[1]+len[2]-ans<<endl;return 0; } View Code

?4 HDU 5348 (歐拉回路,dfs,刪邊

題目:給出一個圖,要求指定邊的方向,使得任意點的出度與入度之差小于等于1.

思路:首先,這個問題是肯定有解的。對于任意一個度為奇數的點,從該點開始dfs,將經過路徑上的邊都刪掉,直到下一個度數為奇的點為之,此時路徑中經過的所有點的度的奇偶性都沒有改變,而兩端點的度都變為了偶數。這樣下去一定可以使得度數全為偶數,并且只有兩端點的出入度差為1.然后再跑一遍歐拉回路就可以給所有的邊找定方向,由于歐拉回路每次有 出必有進,所以對出入度只差沒有影響。

另外此題在實現上有幾個技巧,首先是建圖,用數組存邊可以使得正向邊和反向邊相鄰,并且可以通過位運算計算。其次,如果采用vector建圖的話,刪邊每次從back刪就是O(1),否則會超時(當然也可以寫成鏈表,但是我一般都是用vector)。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ */ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio(false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxe=6e5+300; const int maxn=1e5+300; struct EDGE{int to;bool d; }es[maxe]; bool del[maxe]; int deg[maxn]; int eh=0; int ans[maxe]; vector<int> G[maxn]; int T; int n,m; void init(){eh=0;for(int i=0;i<=n;i++){G[i].clear();}memset(ans,0,sizeof ans);memset(del,0,sizeof del);memset(deg,0,sizeof deg); } void addedge(int from,int to){es[eh].to=to;es[eh].d=1;G[from].pb(eh++);es[eh].to=from;es[eh].d=0; G[to].pb(eh++);deg[from]++,deg[to]++; } set<int> d1; void dfs(int v){while(!G[v].empty()&&del[G[v].bk]) G[v].PB();deg[v]--;del[G[v].bk]=del[G[v].bk^1]=1;ans[G[v].bk/2]=es[G[v].bk].d;int to=es[G[v].bk].to;deg[to]--;if(deg[to]%2==0){d1.erase(to);return;}dfs(to); } void eular(int v){while(!G[v].empty()&&del[G[v].bk]) G[v].PB();if(G[v].empty()) return;deg[v]--;EDGE e=es[G[v].bk];del[G[v].bk]=del[G[v].bk^1]=1;ans[G[v].bk/2]=e.d;deg[e.to]--;G[v].PB();eular(e.to); } void solve(){d1.clear();for(int i=1;i<=n;i++){if(deg[i]%2) d1.insert(i);}while(d1.size()){int v=*d1.begin();d1.erase(v);dfs(v);}for(int i=1;i<=n;i++){if(deg[i]){eular(i);}} } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n>>m;init();for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);addedge(u,v);}solve();for(int i=0;i<m;i++){printf("%d\n",ans[i]);}}return 0; } View Code

?5 HDU 5409(橋,dfs,樹形dp

題目:求一個圖中的橋,以及被該橋隔開的點對,要求第一個點的標號盡量大,第二個點的標號盡量小,并且第一個點大于第二個點。

思路:首先有一個必須要注意到的地方是對于橋而言,兩邊的點就是所有的點,所以答案必然是沒有n的那一邊最大的點,以及比這個點大一的點。然后求橋就是直接上tarjan算法,現在問題就是求出一個橋的左右兩邊最大的點。這個可以通過樹形dp求解。對于每一個點,第一遍dfs記錄該點的子樹包含點的最大值和次大值,第二遍dfs算出這個點通過其父邊走到的那一邊的最大值,這個要就最大和次大值討論一下。然后dp的第一次dfs可以和tarjan寫在一起,第二次直接求出結果。

注意這圖并不是一棵樹,但是可以用一次dfs把它變成一棵樹,并且刪去不在樹上的邊(每條邊給定一個方向),這樣所有的橋必然在樹上,并且被該橋分開的雙連通分量位于橋的兩側。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio(false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2e5+3000; bool del[maxn]; int es[maxn]; int eh=0; vector<int> G[maxn]; void addedge(int from,int to){es[eh]=to;G[from].pb(eh++);es[eh]=from;G[to].pb(eh++); } int T,n,m; int low[maxn],dfn[maxn],clo,rmax[maxn],smax[maxn],maxid[maxn]; void tarjan_dfs(int v){dfn[v]=low[v]=++clo;for(int i=0;i<G[v].size();i++){int e=G[v][i];if(del[e]) continue;int u=es[e];del[e^1]=1;if(!dfn[u]){tarjan_dfs(u);low[v]=min(low[v],low[u]);if(max(u,rmax[u])>rmax[v]){smax[v]=max(u,rmax[u]);swap(smax[v],rmax[v]);maxid[v]=u;}else if(max(u,rmax[u])>smax[v]){smax[v]=max(u,rmax[u]);}}else{low[v]=min(low[v],dfn[u]);}} } int ans[maxn][2]; bool vis[maxn]; void work(int v,int from,int f){vis[v]=1;for(int i=0;i<G[v].size();i++){int e=G[v][i];if(del[e]||vis[es[e]]) continue;int u=es[e];if(u==maxid[v]){if(max(v,smax[v])>smax[u]){smax[u]=max(v,smax[v]);}}else{if(max(v,rmax[v])>smax[u]){smax[u]=max(v,rmax[v]);}}work(u,e,v);}if(f!=-1&&low[v]==dfn[v]){if(max(v,rmax[v])==n){ans[from/2][0]=max(f,smax[f]);ans[from/2][1]=max(f,smax[f])+1;}else{ans[from/2][0]=max(v,rmax[v]);ans[from/2][1]=max(v,rmax[v])+1;}} } void init(){clo=eh=0;memset(del,0,sizeof del);memset(dfn,0,sizeof dfn);memset(ans,0,sizeof ans);memset(smax,0,sizeof smax);memset(rmax,0,sizeof rmax);memset(vis,0,sizeof vis);for(int i=0;i<=n;i++)G[i].clear(); } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n>>m;init();for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);addedge(a,b);}tarjan_dfs(1);work(1,0,-1);for(int i=0;i<m;i++){printf("%d %d\n",ans[i][0],ans[i][1]);}}return 0; } View Code

?6 PKU 1655(求樹的重心,樹形dp

題目:求一個點,以這個點為根的樹的最大子樹最小。

思路:簡單的樹形dp(dfs?),然而看錯題wa了半個小時==,題目說要輸出number,我以為要輸出數量,結果尼瑪居然是要輸出編號。。。。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2e4+300; int T; int n; vector<int> G[maxn]; int ansv,ansn; int num1[maxn]; void init(){for(int i=0;i<=n;i++){G[i].clear();}ansn=1e9; } void dfs(int v,int f){num1[v]=1;int maxx=0;for(int i=0;i<G[v].size();i++){int u=G[v][i];if(u==f) continue;dfs(u,v);num1[v]+=num1[u];maxx=max(maxx,num1[u]);}maxx=max(maxx,n-num1[v]);if(maxx<ansn){ansn=maxx;ansv=v;}else if(maxx==ansn){ansv=v;} } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n;init();for(int i=0;i<n-1;i++){int a,b;scanf("%d%d",&a,&b);G[a].pb(b);G[b].pb(a);}dfs(1,-1);printf("%d %d\n",ansv,ansn);}return 0; } View Code

7? PKU1741(樹分治

題目:求一棵樹上路徑長度小于k的路徑條數。

思路:這是LTC的男人八題里比較簡單的一道。首先如果不是樹,而是鏈的話,我們可以想到一種分治算法(當然鏈的情況不分治更快),就是對于一個中點,對答案有貢獻的要么是跨越中點的路徑,要么是兩邊的路徑,那么每次從中點分開,進行分治的話復雜度是O(nlogn),對于這個樹上的情況思路也是一樣的,但是樹上的分治有個比較特殊的地方是這個中點不太好找,需要跑一次dfs。然后對每個分開的子樹遞歸計算。我的實現總共用了5個遞歸,似乎可以少用一個(算子樹的節點數目的時候),但是沒想清楚怎么去,就索性直接又dfs了一遍。

另外,除了這種點分治,還可以使用邊分治,但是邊分治有一種難以避免的使復雜度大大增加的情況(處理方法似乎比較復雜),所以樹分治的首選還是點分治。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2e4+300; struct EDGE{int to,d; }; vector<int> G[maxn]; EDGE es[maxn]; int eh; int center,mins; bool vis[maxn]; vector<int> dis; int n,k; int cnt; int getCenter(int v,int f){int ssum=0,maxs=0;for(int i=0;i<G[v].size();i++){int e=G[v][i];int u=es[e].to;if(vis[u]||u==f) continue;int aa=getCenter(u,v);if(aa>maxs) maxs=aa;ssum+=aa;}if(max(maxs,cnt-ssum-1)<mins){center=v;mins=max(maxs,cnt-ssum-1);}return ssum+1; } void dfs(int v,int fore,int f){dis.pb(fore);for(int i=0;i<G[v].size();i++){int e=G[v][i];int u=es[e].to;if(vis[u]||u==f) continue;dfs(u,fore+es[e].d,v);} } void cont(int v,int f){cnt++;for(int i=0;i<G[v].size();i++){int e=G[v][i];int u=es[e].to;if(vis[u]||u==f) continue;cont(u,v);} } int cul(int v,int fore){int ans=0;dis.clear();dfs(v,fore,-1);sort(dis.begin(),dis.end());int p=0,q=dis.size()-1;while(p<=q){while(p<=q&&dis[q]+dis[p]>k) q--;if(p>q) break;ans+=q-p;p++;}return ans; } int solve(int v){vis[v]=1;int ans=0;ans+=cul(v,0);for(int i=0;i<G[v].size();i++){int e=G[v][i];int u=es[e].to;if(vis[u]) continue;ans-=cul(u,es[e].d);mins=1e8;cnt=0;cont(u,-1);getCenter(u,-1);ans+=solve(center);}return ans; } void addedge(int from,int to,int d){es[eh].to=to,es[eh].d=d;G[from].pb(eh++);es[eh].to=from,es[eh].d=d;G[to].pb(eh++); } void init(){eh=0;for(int i=0;i<=n;i++)G[i].clear();memset(vis,0,sizeof vis);dis.clear(); } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);while(cin>>n>>k){if(n==0&&k==0) break;init();for(int i=0;i<n-1;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);addedge(a,b,c);}mins=1e9;dfs(1,0,-1);cnt=0;cont(1,-1);getCenter(1,-1);cout<<solve(center)<<endl;}return 0; } View Code

8?PKU 1390(dp,巧妙思維

題目:若干染了色的盒子排成一排,相同顏色的盒子可以消去,獲益為消去的盒子數平方,求最大獲益。

思路:這個解法比較新穎。自己開始看這個題的之后想的是顏色相同的兩段配對,然后區間dp,然后自己立馬就找了個反例(最后消去的一塊可能來自于最初的多個塊,而不只是2個)。。然后就不會了。對于dp來說,如果出現解決不了的問題,就可以往升高維數的方向考慮。此題除了區間以外,考慮增加一維,表示最后一位與其后同色的配對有多少個(這種情況對應了消去后面k個同色塊之間的其他塊的決策),然后對于這種情況,要么在這個位置把積累的k個塊連同最后一個塊都消掉,要么繼續累計,但是這個累計只能累計到前面的某個同色塊。所以實際的復雜度遠不到O(n^4),這樣就可以在時間內解決問題了。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=205; int T; int n; int a[maxn]; int dp[maxn][maxn][maxn]; vector<int> num,col; int cal(int l,int r,int k){if(l==r) return sq(num[l]+k);if(dp[l][r][k]!=-1) return dp[l][r][k];dp[l][r][k]=0;dp[l][r][k]=max(dp[l][r][k],cal(l,r-1,0)+sq(num[r]+k));for(int p=l;p<r-1;p++){if(col[p]==col[r]&&r-1>=p+1)dp[l][r][k]=max(dp[l][r][k],cal(l,p,num[r]+k)+cal(p+1,r-1,0));}return dp[l][r][k]; } int cas=0; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n;memset(dp,-1,sizeof dp);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}num.clear();col.clear();int last=-1,cont=0;for(int i=1;i<=n;i++){if(a[i]!=last){if(last!=-1){num.pb(cont);col.pb(last);}cont=1;last=a[i];}else{cont++;}}col.pb(last);num.pb(cont);int len=col.size();printf("Case %d: %d\n",++cas,cal(0,len-1,0));}return 0; } View Code

?注意這題還有個神奇的優化:其實對于把值往前推的操作,值需要計算最近的同色的位置就行了(我得承認這和我想的有點不一樣==,但是把break提到外面就wa。。。依然是意義不明。。),然后就可以break,這么搞速度能提升到原來的4倍!!

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=205; int T; int n; int a[maxn]; int dp[maxn][maxn][maxn]; vector<int> num,col; int cal(int l,int r,int k){if(l==r) return sq(num[l]+k);if(dp[l][r][k]!=-1) return dp[l][r][k];dp[l][r][k]=0;dp[l][r][k]=max(dp[l][r][k],cal(l,r-1,0)+sq(num[r]+k));for(int p=r-2;p>=l;p--){if(col[p]==col[r]&&r-1>=p+1){int res=cal(l,p,num[r]+k)+cal(p+1,r-1,0);if(dp[l][r][k]<res){dp[l][r][k]=res;break;//神剪枝!!。。 }}}return dp[l][r][k]; } int cas=0; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n;memset(dp,-1,sizeof dp);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}num.clear();col.clear();int last=-1,cont=0;for(int i=1;i<=n;i++){if(a[i]!=last){if(last!=-1){num.pb(cont);col.pb(last);}cont=1;last=a[i];}else{cont++;}}col.pb(last);num.pb(cont);int len=col.size();printf("Case %d: %d\n",++cas,cal(0,len-1,0));}return 0; } View Code

?9 HDU 5001(概率dp,暴力枚舉。

題目:一個人在圖上任意一點開始隨機游走d步,問某點未被經過的概率。

思路:刪去一個點,然后計算在不經過該點的情況下最后到達其他點的概率和即是答案。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P; int T; double dp[60][10040]; vector<int> G[60]; int n,m,d; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n>>m>>d;for(int i=0;i<=n;i++) G[i].clear();for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);G[a].pb(b);G[b].pb(a);}for(int del=1;del<=n;del++){memset(dp,0,sizeof dp);for(int i=1;i<=n;i++) dp[i][0]=1.0/n;for(int s=0;s<d;s++){for(int i=1;i<=n;i++){if(i==del) continue;for(int j=0;j<G[i].size();j++){if(G[i][j]==del) continue;int u=G[i][j];dp[u][s+1]+=dp[i][s]/G[i].size();}}}double ans=0;for(int i=1;i<=n;i++){if(i==del) continue;ans+=dp[i][d];}printf("%.10f\n",ans);}}return 0; } View Code

?10 Ural1519(插頭dp

題目:一個棋盤中有若干障礙,求經過所有非障礙格子的回路數目。

思路:cdq的論文例題,然而不會寫。。。。幾乎是照著隊友的代碼抄了一遍,毫無成就感。。。插頭dp。。。一定要再自己寫一道。。。。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const ll hashsize=2e6; int n,m; int M[30][30]; int ex,ey; int bit[30]; int hashTab[hashsize]; int Snum[2]; ll dp[2][hashsize],ans; int state[2][hashsize]; bool idx; void hashCal(ll s,ll num){int hashpos=s%hashsize;while(hashTab[hashpos]!=-1){if(state[idx][hashTab[hashpos]]==s){dp[idx][hashTab[hashpos]]+=num;return;}hashpos++;if(hashpos==hashsize) hashpos=0;}hashTab[hashpos]=Snum[idx]++;state[idx][hashTab[hashpos]]=s;dp[idx][hashTab[hashpos]]=num; } void plug_dp(){for(int i=1;i<=n;i++){for(int k=0;k<Snum[idx];k++) state[idx][k]<<=2;for(int j=1;j<=m;j++){idx^=1;Snum[idx]=0;memset(hashTab,-1,sizeof hashTab);for(int k=0;k<Snum[1^idx];k++){int s=state[1^idx][k];int p=(s>>bit[j-1])%4;int q=(s>>bit[j])%4;ll num=dp[idx^1][k];if(!M[i][j]){if(!p&&!q){hashCal(s,num);}}else if(!p&&!q){if(M[i+1][j]&&M[i][j+1]){s+=(1<<bit[j-1])+(2<<bit[j]);hashCal(s,num);}}else if(!p&&q){if(M[i][j+1]) hashCal(s,num);if(M[i+1][j]){s+=(q<<bit[j-1])-(q<<bit[j]);hashCal(s,num);}}else if(p&&!q){if(M[i+1][j]) hashCal(s,num);if(M[i][j+1]){s+=(p<<bit[j])-(p<<bit[j-1]);hashCal(s,num);}}else if(p+q==2){int b=1;for(int t=j+1;t<=m;t++){int v=(s>>bit[t])%4;if(v==1) b++;if(v==2) b--;if(b==0){s-=(1<<bit[t]);break;}}s-=(1<<bit[j-1])+(1<<bit[j]);hashCal(s,num);}else if(p+q==4){int b=1;for(int t=j-2;t>=0;t--){int v=(s>>bit[t])%4;if(v==2) b++;else if(v==1) b--;if(b==0){s+=(1<<bit[t]);break;}}s-=(2<<bit[j-1])+(2<<bit[j]);hashCal(s,num);}else if(p==2&&q==1){s-=(2<<bit[j-1])+(1<<bit[j]);hashCal(s,num);}else if(p==1&&q==2){if(i==ex&&j==ey){ans+=num;}}}}} } void init(){for(int i=0;i<=15;i++)bit[i]=i<<1;dp[0][0]=1;Snum[0]=1; } void read(){char r[30];cin>>n>>m;for(int i=1;i<=n;i++){scanf("%s",r);for(int j=1;j<=m;j++){if(r[j-1]=='*'){M[i][j]=0;}else{M[i][j]=1;ex=i,ey=j;}}} } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout); init();read();plug_dp();cout<<ans<<endl;return 0; } View Code

?11 POJ 3635(最短路

題目:每個城市的油價不同,走一單位距離要消耗一單位油,油箱上限為c,問從s到e的最小花費。

思路:我們可以增加一維,用dis[i][j]表示在城市i有j的油量時的花費,然后這個題就轉換成了1e5個點的最短路。但是我一開始寫錯了,原因是這題要求的到e的最短路,而不是到所有點的最短路,那么首先擴展的時候,每一個點只需要增加1的油量(這是離這個點最近的點,再增加油量的時候等到下次擴展)。另外一旦擴展到了e,立即退出,此時e點必然是最短路,如果不退出勢必會把所有點的滿油量情況都試遍,雖然對于最壞情況兩種寫法是一樣的,但是對于隨機情況效率提升是非常大的。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-3) #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=1005; struct EDGE{int to,d;EDGE(int to,int d):to(to),d(d){} }; struct A{int v,has,cost;bool operator < (const A &C)const{return cost>C.cost;}A(int v,int has,int cost):v(v),has(has),cost(cost){} }; vector<EDGE> G[maxn]; priority_queue<A> Q; int n,m; int cost[maxn][105]; int p[maxn]; int c,s,e; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>n>>m;for(int i=0;i<n;i++){scanf("%d",&p[i]);}for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);G[a].pb(EDGE(b,c));G[b].pb(EDGE(a,c));}int q;cin>>q;while(q--){int cont=0;while(!Q.empty()) Q.pop();scanf("%d%d%d",&c,&s,&e);memset(cost,0x3f,sizeof cost);cost[s][0]=0;Q.push(A(s,0,0));bool f=0;int ans;while(!Q.empty()){cont++;A now=Q.top();Q.pop();int v=now.v,t=now.has;if(v==e) break;if(cost[v][t]<now.cost) continue;if(t+1<=c){if(cost[v][t+1]>cost[v][t]+p[v]){cost[v][t+1]=cost[v][t]+p[v];Q.push(A(v,t+1,cost[v][t]+p[v]));}}for(int i=0;i<G[v].size();i++){EDGE &e=G[v][i];if(t>=e.d){if(cost[e.to][t-e.d]>cost[v][t]){cost[e.to][t-e.d]=cost[v][t];Q.push(A(e.to,t-e.d,cost[e.to][t-e.d]));}}}}if(cost[e][0]<1e8)printf("%d\n",cost[e][0]);else puts("impossible");}return 0; } View Code

?12 ZOJ 3820(樹的直徑,二分

題目:求兩點使得樹上任意一點到這兩點的最短距離中最長的最短。

思路:二分答案,可以注意到這兩點在樹的直徑上肯定是最優的,bfs判定一下即可。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.00000001 #define IINF (1<<29) #define LINF (1ll<<59) #define INF 1000000000 typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2e5+300; int n; vector<int> G[maxn]; int dis[maxn]; vector<int> D; bool mark[maxn]; void bfs(int s){memset(dis,-1,sizeof dis);queue<int> Q;dis[s]=0;Q.push(s);while(!Q.empty()){int v=Q.front();Q.pop();for(int i=0;i<G[v].size();i++){int u=G[v][i];if(dis[u]==-1){dis[u]=dis[v]+1;Q.push(u);}}} } void getD(int v,int maxp){D.clear();while(1){D.pb(v);if(v==maxp) break;for(int i=0;i<G[v].size();i++){int u=G[v][i];if(dis[u]+1==dis[v]){v=u;break;}}} } bool vis[maxn]; void bfs_mark(int v,int rem){queue<P> Q;Q.push(P(v,rem));while(!Q.empty()){int u=Q.front().fs;int r=Q.front().se;mark[u]=1,vis[u]=1;Q.pop();for(int i=0;i<G[u].size();i++){int uu=G[u][i];if(!vis[uu]){if(r>0)Q.push(P(uu,r-1));}}} } int ans[2]; bool check(int p){if(p>=D.size()-1){ans[0]=1;ans[1]=2;return 1;}ans[0]=D[p];ans[1]=D[D.size()-1-p];if(ans[1]==ans[0]){ans[1]=D[p-1];}memset(mark,0,sizeof mark);memset(vis,0,sizeof vis);bfs_mark(ans[0],p);memset(vis,0,sizeof vis);bfs_mark(ans[1],p);for(int i=1;i<=n;i++){if(!mark[i]) return 0;}return 1; } int T; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){cin>>n;for(int i=0;i<=n;i++)G[i].clear();for(int i=0;i<n-1;i++){int a,b;scanf("%d%d",&a,&b);G[a].pb(b);G[b].pb(a);}if(n==2){puts("0 1 2");continue;}bfs(1);int maxd=0,maxp=0;for(int i=1;i<=n;i++){if(dis[i]>maxd){maxd=dis[i];maxp=i;}}bfs(maxp);maxd=0;int maxs=0;for(int i=1;i<=n;i++){if(dis[i]>maxd){maxd=dis[i];maxs=i;}}getD(maxs,maxp);int l=0,r=n-1;while(r-l>1){int mid=(r+l)/2;if(check(mid)){r=mid;}else{l=mid;}}check(r);printf("%d %d %d\n",r,ans[0],ans[1]);}return 0; } View Code

?13 PKU 3071(概率dp

題目:足球賽,每次比賽與相鄰的球隊進行,勝出的晉級。問最后獲勝希望最大的球隊是哪只。

思路:dp[i][j]=第i輪第j只球隊勝出的概率,注意到每輪每只球隊只能與特定范圍內的球隊比賽。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-6) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=1<<10; int n; double p[maxn][maxn]; double dp[30][maxn]; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);while(cin>>n){if(n==-1) break;int num=(1<<n);for(int i=0;i<num;i++){for(int j=0;j<num;j++){scanf("%lf",&p[i][j]);}}memset(dp,0,sizeof dp);for(int i=0;i<num;i++) dp[0][i]=1;for(int k=1;k<=n;k++){int rd=1<<k;for(int i=0;i<num;i++){for(int j=i/rd*rd;j<i/rd*rd+rd;j++){if(j/(rd/2)==i/(rd/2)) continue;dp[k][i]+=dp[k-1][i]*dp[k-1][j]*p[i][j];}}}double maxx=0;int ans=0;for(int i=0;i<num;i++){if(dp[n][i]>maxx){maxx=dp[n][i];ans=i;}}cout<<ans+1<<endl;}return 0; } View Code

?14 SGU 495

題目:每次在n個盒子中隨機選一個,選m次后沒被選中的盒子期望個數是多少?

思路:由于每個盒子是一樣的,那么這個盒子被選中的期望次數就是它被選中的概率(1減一下即可),然后總的期望次數就是乘n。

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-6) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;int n,m; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);while(cin>>n>>m){double ans=1;for(int i=1;i<=m;i++){ans*=((double)(n-1)/n);}ans=1-ans;printf("%.14f",ans*n);}return 0; } View Code

?15 ZOJ 3329

題目:置三個色子,每次如果分別等于abc,就分數置零,否則加上擲出的點數,達到n以上退出,問期望步數。

思路:設出dp【0】然后方程變形一下可發現規律,參照:http://blog.csdn.net/xingyeyongheng/article/details/25639827

/* * @author: Cwind * http://www.cnblogs.com/Cw-trip/ * 蒟蒻只能做幾個水題。。 */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-19) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;int T; int n,k[3],h[3]; int tol; double A[600],B[600]; void dfs(int v){//cout<<v<<endl;if(A[v]>0) return;if(v>n) return;for(int i=1;i<=k[0];i++){for(int j=1;j<=k[1];j++){for(int m=1;m<=k[2];m++){dfs(v+i+j+m);if(i==h[0]&&j==h[1]&&m==h[2]) continue;A[v]+=A[v+i+j+m]/tol;B[v]+=B[v+i+j+m]/tol;}}}A[v]+=1.0/tol;B[v]+=1; } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);cin>>T;while(T--){tol=1;cin>>n;memset(A,0,sizeof A);memset(B,0,sizeof B);for(int i=0;i<3;i++){scanf("%d",&k[i]);tol*=k[i];}for(int i=0;i<3;i++){scanf("%d",&h[i]);}dfs(0);printf("%.15f\n",B[0]/(1-A[0]));}return 0; } View Code

?16 HDU.4089(概率dp好題

題目:有n個人排名激活網游,我目前在第m位,對于每個人,有可能服務器出故障,他就得從最后開始繼續排,或者他激活成功了,那么就出隊。還有一種可能是系統直接崩潰,隊里的人都激活不了了。?!,F在我覺得如果我都排到前k了,結果系統崩潰了,這就是一件很坑爹的事情,問坑爹的概率。。。

思路:這題連kuangbin大神都說難啊。。。(hdu莫名奇妙改了這題的內存,導致以前能a的代碼基本都a不了了。。雖然滾動一下很簡單但是我莫名就是過不了,然后也不想再耗時間了。。。。)首先dp的狀態就是有i個人,目前排在第j位,到達目標狀態的概率。轉移方程還是很清楚,但是我們會發現轉移會出現環。聯想到之前設出一個值的做法呢?(腦洞不足。。。)但是這題是可以遞推的,首先在轉移中涉及i-1的部分是已經求得的。對于i的部分,涉及的是j-1的值,直接轉移會遇到1然后再要求最后一位的值的情況。但是我們可以把這個情況變換為之前求得的值。基本的想法是這樣的:我們考慮減少人數(只有當有人激活成功的時候人數才會減少,同時考慮正好到某人崩潰的情況,注意只考慮一圈,因為最終跳出的情況對應了這一輪必然發生了某種變化),那么可以枚舉第一個激活成功的人的位置,可能是第1到第i-1個人,讓這個人激活之后就轉換成了i-1的情況。還有一種情況就是我到了第1,然后正好gg了(這種情況對應了人數始終沒有減少),如果人數一直沒有減少,轉了一圈也沒有gg,那么就回到了開始的情況(我們求解要避免這種無意義的循環)。這樣就可以求的我排在最后的情況,然后求得在第一的情況,問題順利解決。

/* * @author: Cwind */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-9) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2005; int N,M,K; double p1,p2,p3,p4; double dp[2][maxn]; double c[maxn]; double pp[maxn]; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("defense.in","r",stdin);//freopen("defense.out","w",stdout);while(scanf("%d%d%d%lf%lf%lf%lf",&N,&M,&K,&p1,&p2,&p3,&p4)!=EOF){if(p4<eps){puts("0.00000");continue;}memset(dp,0,sizeof dp);memset(c,0,sizeof c);memset(pp,0,sizeof pp);bool f=0;double p=p2/(1-p1);double p33=p3/(1-p1);double p44=p4/(1-p1);dp[f][1]=p44/(1-p);c[1]=p44;pp[0]=1.0;for(int i=1;i<=N;i++) pp[i]=p*pp[i-1];for(int i=2;i<=N;i++){for(int j=2;j<=K;j++) c[j]=p33*dp[f][j-1]+p44;for(int j=K+1;j<=i;j++) c[j]=p33*dp[f][j-1];double tmp=c[1]*pp[i-1];for(int j=2;j<=K;j++) tmp+=c[j]*pp[i-j];for(int j=K+1;j<=i;j++) tmp+=c[j]*pp[i-j];dp[f^1][i]=tmp/(1-pp[i]);dp[f^1][1]=p44+dp[f^1][i]*p;for(int j=2;j<i;j++){dp[f^1][j]=c[j]+dp[f^1][j-1]*p;}f^=1;}printf("%.5f\n",dp[f][M]);}return 0; } View Code

(并未ac)基本與kuangbin大神一致http://www.cnblogs.com/kuangbin/archive/2012/10/03/2710987.html

17 HDU 5442(最小表示法,后綴數組,kmp,二分

題目:求出一個串的最大表示,要求1)如果最大表示是唯一的,輸出起始位置和方向2)如果有兩種一樣的,那么輸出起始位置小的3)如果起始位置也一樣,輸出正向的。

思路:弱不會做。。。看了幾份代碼,大概有兩種思路,一種是求出后綴數組后亂搞,一種是最小表示法。

本來想最小表示法是比較裸的,寫了一發后發現并不是這樣。最小表示法求出的是最小串的最小起始位置,對于正向而言這個結果正是想要的,但是逆向跑一遍就會發現求出的是(原串中)最后的位置。最小表示法求解主要就要解決這個問題。

我看到兩種搞法,一種是kmp,一種是二分(如果把起始位置往后推,最小表示還能在后面找到的話,最小起始位置就比當前位置小)。

二分感覺是挺自然的一種想法,速度也不差(佩服啊),kmp可以找匹配的最后位置,這個應該是非常重要的一個應用。

(代碼還沒寫。。。)

UPD:第一次寫完之后不明原因一直T,,,,遂放棄,今天又寫了一遍還是T...簡直日狗...然后終于發現hdu的strcat不能copy自己......但是本地運行好好的....

/* * @author: Cwind */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-6) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxlen=1e5+30000; char r[maxlen]; char min1[maxlen],min2[maxlen]; char tmp[maxlen]; char rev[maxlen]; int fail[maxlen]; void getNext(char *s,int *fail,int len){int i=0,j=fail[0]=-1;while(i<len){while(j!=-1&&s[i]!=s[j]) j=fail[j];fail[++i]=++j;} }int MinimumRepresentation2(char *s,int len){ int i=0,j=1,k=0;while(i<len&&j<len&&k<len){int tag=s[(j+k)%len]-s[(i+k)%len];if(tag==0){k++;continue;}if(tag<0)j+=k+1;elsei+=k+1;if(i==j) j++;k=0;}return min(i,j); }int T; int n; int main(){ freopen("/home/files/CppFiles/in","r",stdin);//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);cin>>T;while(T--){cin>>n;scanf("%s",r);strcpy(rev,r);int len=n;for(int i=0;i<n-i-1;i++){swap(rev[i],rev[n-i-1]);}for(int i=len;i<len*2;i++){rev[i]=rev[i-len];}rev[len*2]=0;int p1=MinimumRepresentation2(r,len);for(int i=0;i<len;i++){min1[i]=r[(i+p1)%len];}min1[len]=0;int p2=MinimumRepresentation2(rev,len);for(int i=0;i<len;i++){min2[i]=rev[(i+p2)%len];}min2[len]=0;getNext(min2,fail,len);int i=0,j=0;int last=0;while(i<len*2-1){if(j==-1||min2[j]==rev[i]) i++,j++;else j=fail[j];if(j==len){last=i-len;}}int d=strcmp(min1,min2);if(d>0){printf("%d 0\n",p1+1);}else if(d<0){printf("%d 1\n",len-last);}else{if(p1+1<=len-last){printf("%d 0\n",p1+1);}else{printf("%d 1\n",len-last);}}}return 0; } View Code

?

18 CF 578/C

題目:求一個x使得數列ai-x的最大連續和的絕對值最小。

思路:裸三分,比賽的時候被卡精度簡直郁悶。。。題解還說了一種方法,感覺很巧妙:構造若干條直線,然后對應每個x的這個pron值就是對應的最高點和最低點之差,然后可以O(n)構造凸包(好像不是凸的?)求解。

http://codeforces.com/blog/entry/20368

19 HDU4219(概率dp

題目:給出一個樹,隨機指定樹上邊的長度,問最終樹上任意兩點間的距離不超過s的概率.

思路:dp狀態為dp[i][j]表示第i個節點下的最長鏈長度為j時(子樹內長度都不超過s的)概率.

/* * @author: Cwind */ //#pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-6) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxlen=520; const int maxn=70; int T,n,l,s; vector<int> G[maxn]; double dp[maxn][maxlen]; double tmp[maxlen]; double tmp2[maxlen]; double prob; void dfs(int v,int f){if(f!=-1&&G[v].size()==1){dp[v][0]=1;return;}dp[v][0]=-1;for(int i=0;i<G[v].size();i++){int u=G[v][i];if(u==f) continue;dfs(u,v);memset(tmp,0,sizeof tmp);for(int j=0;j<=s;j++){for(int a=0;a<=l;a++){if(j+a<=s){tmp[j+a]+=prob*dp[u][j];}}}if(dp[v][0]==-1){for(int j=0;j<=s;j++){dp[v][j]=tmp[j];}}else{memset(tmp2,0,sizeof tmp2);for(int j=0;j<=s;j++){for(int k=0;k<=s;k++){if(k+j>s) break;tmp2[max(k,j)]+=dp[v][j]*tmp[k];}}for(int j=0;j<=s;j++){dp[v][j]=tmp2[j];}}} } void init(){for(int i=0;i<=n;i++){G[i].clear();} } int cas=0; int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);cin>>T;while(T--){cin>>n>>l>>s;init();memset(dp,0,sizeof dp);for(int i=0;i<n-1;i++){int a,b;scanf("%d%d",&a,&b);G[a].pb(b);G[b].pb(a);}prob=1.0/(l+1);dfs(1,-1);double ans=0;for(int i=0;i<=s;i++){ans+=dp[1][i];}printf("Case %d: %.6f\n",++cas,ans);}return 0; } View Code

?20 HDU4169(樹形背包

題目:在一個樹上選k個點,使得沒有任何一點是另一點的祖先.求最大權值.

思路:挺簡單的一道dp,但是首先不能開全局數組,會爆內存.其次,有一個很關鍵的優化,就是在子樹中可能節點個數達到k的是很少的,所以要記錄一下節點個數上限,這個優化可以從tle優化到只有1400ms..

/* * @author: Cwind */ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <map> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <functional> #include <set> #include <cmath> using namespace std; #define IOS std::ios::sync_with_stdio (false);std::cin.tie(0) #define pb push_back #define PB pop_back #define bk back() #define fs first #define se second #define sq(x) (x)*(x) #define eps (1e-6) #define IINF (1<<29) #define LINF (1ll<<59) #define INF (1000000000) #define FINF (1e3) typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> P;const int maxn=2e5; int n,k; vector<int> G[maxn]; int a[maxn]; int tmp[305]; int dfs(int v){int dp[305];memset(dp,-1,sizeof dp);dp[0]=0;for(int i=0;i<G[v].size();i++){int u=G[v][i];int num=dfs(u);for(int x=k;x>=0;x--){for(int j=1;j<=num;j++){if(j+x<=k&&dp[x]!=-1&&tmp[j]!=-1){dp[j+x]=max(dp[j+x],dp[x]+tmp[j]);}}}}dp[1]=max(dp[1],a[v]);for(int i=0;i<=k;i++){tmp[i]=dp[i];}for(int i=0;i<=k;i++){if(dp[i]==-1){return i;}} } void init(){for(int i=0;i<=n;i++){G[i].clear();} } int main(){freopen("/home/files/CppFiles/in","r",stdin);//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);while(cin>>n>>k){init();for(int i=1;i<=n;i++){int x;scanf("%d%d",&x,&a[i]);G[x].pb(i);}dfs(0);if(tmp[k]==-1){puts("impossible");}else{printf("%d\n",tmp[k]);}}return 0; } View Code

?

轉載于:https://www.cnblogs.com/Cw-trip/p/4780036.html

總結

以上是生活随笔為你收集整理的9月——都已经9月了还不好好刷题?。。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产视频不卡一区 | 四虎影视成人精品国库在线观看 | 国内丰满少妇猛烈精品播放 | 天天爱天天操天天射 | 日本精品在线视频 | 夜夜夜夜操 | 日韩电影一区二区在线观看 | 99久久精品久久亚洲精品 | 色综合久久88色综合天天免费 | 天天狠狠操 | av视屏在线播放 | 最近日本韩国中文字幕 | 一区二区三区手机在线观看 | 国产一区电影在线观看 | 日韩在线观看网址 | 日日操天天操夜夜操 | 91精品啪在线观看国产 | 国产中文字幕在线看 | 一级黄色片在线 | 成人h在线观看 | 国产成人精品一区二区三区福利 | 日韩精品三区四区 | 欧美国产日韩在线视频 | 国产精品一区二区视频 | 午夜久久久久久久久久久 | 精品亚洲免费 | 天天色天天射天天操 | 西西大胆免费视频 | 国产高清综合 | 国产精品毛片久久久久久久 | 亚洲最大成人网4388xx | 国产精品久免费的黄网站 | 国产精品久久久一区二区三区网站 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 天天拍天天干 | 久久精品日产第一区二区三区乱码 | 九九一级片 | 2022国产精品视频 | 黄色av一区 | 日本99精品 | 国内成人精品2018免费看 | 欧美 高跟鞋交 xxxxhd | 成人亚洲网 | 国产精品久久久久久久久久ktv | 欧美一区二区三区特黄 | 国产日韩欧美视频在线观看 | 日韩精品一区二区免费视频 | 夜夜躁天天躁很躁波 | av免费在线网站 | 美国人与动物xxxx | 免费在线91 | 日韩夜夜爽| 国产二区精品 | 中文字幕一区2区3区 | 福利视频一二区 | 成人av高清在线观看 | 一区二区三区四区免费视频 | 高清一区二区三区av | 婷婷久操 | 成人av网站在线观看 | 西西www444| 丰满少妇高潮在线观看 | 亚洲综合一区二区精品导航 | 99国内精品| 国产一区欧美在线 | 久久精品亚洲综合专区 | 国产成人精品一区二区三区在线观看 | 亚洲理论片 | 麻豆影视网| 日韩欧美网站 | 黄色一级动作片 | 国产欧美中文字幕 | 亚洲黄色免费 | wwwwww国产| 久久久激情网 | 久草视频播放 | 亚洲精品综合欧美二区变态 | 免费日韩 精品中文字幕视频在线 | 久久五月情影视 | 日韩免费区 | 欧美日韩3p | 欧美一级在线观看视频 | 久久电影中文字幕视频 | 精品女同一区二区三区在线观看 | 久久er99热精品一区二区 | 91人人澡人人爽 | 久久久国产成人 | 狠狠操在线 | 国产无区一区二区三麻豆 | 国产剧情在线一区 | 国产精品自产拍在线观看蜜 | 美女网站视频色 | 日日天天av | 国产很黄很色的视频 | 中文字幕在线中文 | 96超碰在线 | 五月激情六月丁香 | 国产亚洲91 | 久久精品2 | 日韩大片在线观看 | 狠狠色狠狠综合久久 | 999电影免费在线观看2020 | 夜夜躁狠狠躁日日躁 | 欧美日韩精品区 | 国产视频一区在线播放 | 久久久久久久久久久高潮一区二区 | 九九久久久久99精品 | 91福利小视频 | 亚洲另类视频在线 | 欧美做受高潮电影o | 91精品久久久久久综合乱菊 | 一区二区三区在线观看中文字幕 | 69夜色精品国产69乱 | 日韩在线字幕 | www,黄视频 | 国产 欧美 日本 | 亚洲精品中文字幕视频 | 91精品1区 | 久99久久| 最近字幕在线观看第一季 | 国产麻豆剧传媒免费观看 | 96精品高清视频在线观看软件特色 | a级免费观看 | 日韩电影在线观看一区二区 | 久久久精品在线观看 | 日本护士三级少妇三级999 | 国产日韩精品一区二区三区 | 手机av在线不卡 | 色综合小说 | 国产一级视频在线 | 国产一卡久久电影永久 | 日本公妇在线观看 | 啪啪精品 | 手机在线观看国产精品 | 正在播放国产一区二区 | 免费在线国产视频 | 四虎影视成人永久免费观看亚洲欧美 | 国产成人在线观看免费 | 免费观看的av网站 | 丁香 婷婷 激情 | 久久免费黄色大片 | 综合国产在线观看 | 人人澡人人爽欧一区 | 精品亚洲国产视频 | 中文字幕在线视频第一页 | 精品福利在线观看 | 午夜精品福利在线 | 中文字幕视频免费观看 | 毛片网站在线 | 久久夜色精品国产欧美一区麻豆 | 在线小视频 | 激情欧美日韩一区二区 | 国产不卡高清 | 国产高清免费在线播放 | 天天爽夜夜爽精品视频婷婷 | 激情网站五月天 | 日韩xxxbbb| 久章草在线 | 色综合久久天天 | 欧美综合色在线图区 | 婷婷激情综合五月天 | 精品久久久免费视频 | 日本精品久久 | 日韩精品1区2区 | 国内精品久久久久久久久 | 最新av在线免费观看 | 国产免费成人av | 日韩精品不卡在线观看 | 国产精品精品久久久久久 | 日韩中文字幕免费视频 | 欧美日一级片 | 国产 成人 久久 | 日韩av午夜| 成人一区二区在线 | 成人av影视观看 | 久久国内精品视频 | 久草视频首页 | 国产精品婷婷午夜在线观看 | 国产三级视频在线 | 国产精品视频免费在线观看 | www成人精品 | 久草在线视频看看 | 中文资源在线播放 | 在线免费观看视频a | 99高清视频有精品视频 | 人人爱夜夜操 | 欧美最猛性xxxxx亚洲精品 | bbbbb女女女女女bbbbb国产 | 精品一区二区av | 99免在线观看免费视频高清 | 在线黄频 | 激情久久网 | 国产 在线 高清 精品 | 99色资源| 久久理论视频 | 婷婷五综合 | 911精品美国片911久久久 | 久久精品黄| 天天av资源| 久久久99精品免费观看 | 激情九九 | 国产美女网 | 中文字幕免费成人 | 亚洲最大成人免费网站 | 久久在线一区 | 久久综合狠狠综合久久综合88 | 日本免费久久高清视频 | 黄色毛片在线观看 | 99视频在线精品 | 国产精品免费一区二区 | 中文字幕在线视频免费播放 | 四虎影视精品永久在线观看 | 一区二区视频播放 | 国产精品久久久久免费观看 | 丁香在线观看完整电影视频 | 亚洲网站在线看 | 国产亚洲精品久久久久秋 | 在线日本看片免费人成视久网 | 国产黄色一级大片 | 天天操夜夜看 | 亚洲好视频| 日本一区二区三区免费观看 | www.国产高清 | 二区在线播放 | 在线观看日韩视频 | 亚洲国产成人在线观看 | 99久久婷婷 | 丁香花在线视频观看免费 | 精品久久一级片 | 97**国产露脸精品国产 | 亚洲最大成人免费网站 | 天天拍天天操 | 日本久久中文字幕 | 中文字幕日韩无 | 日韩一级片大全 | 99re国产视频 | 欧美日韩精品免费观看 | 婷婷在线五月 | 天天干天天拍天天操天天拍 | 草久久影院 | 久久女教师| 精品久久久久久亚洲综合网 | 在线观看你懂的网站 | 国产精品久久久久影院 | 国产a国产 | 久久少妇av| 亚洲视频每日更新 | 一级精品视频在线观看宜春院 | 精品福利视频在线 | 久久综合中文字幕 | 激情av综合| 国产高清视频 | www免费在线观看 | 国产99色| 97精品在线视频 | 黄色国产精品 | 一级欧美日韩 | 在线观看视频在线观看 | 在线免费黄色av | 欧美日韩一级在线 | 亚洲国产美女精品久久久久∴ | 玖玖爱在线观看 | 亚洲97在线 | 91九色porn在线资源 | 在线播放日韩 | 最近最新最好看中文视频 | 丁香导航 | 五月婷婷伊人网 | 国产高清av免费在线观看 | 日本久久成人中文字幕电影 | 国产精品爽爽久久久久久蜜臀 | 国产精品美女www爽爽爽视频 | 九九综合九九综合 | 狠狠色狠狠色合久久伊人 | 国产精品永久久久久久久久久 | 99视频一区 | 中国成人一区 | 国产一级视频 | 深夜免费小视频 | 欧美大码xxxx| 91完整版观看 | 在线日韩av | 国产精品99在线播放 | 免费av网站观看 | 亚洲欧洲国产视频 | 天天操偷偷干 | 九九导航 | www久| 一区二区视频免费在线观看 | 亚洲欧美视频在线观看 | 国内精品久久久久久久久久清纯 | 欧美激情精品 | 欧美片网站yy | 超碰在线免费福利 | 激情在线五月天 | 97超碰人人干 | 久久精品亚洲精品国产欧美 | 丁香久久五月 | 九九一级片 | 精品国产免费一区二区三区五区 | 国产精品乱码久久久 | 在线黄色国产 | 国产一区二区在线观看视频 | 久草视频中文在线 | 日韩高清不卡一区二区三区 | 香蕉在线视频观看 | 免费a v视频 | 国产精品va在线 | 国产精品ssss在线亚洲 | 特级黄色片免费看 | 在线观看黄a | 日韩av资源在线观看 | 香蕉视频亚洲 | 91色欧美 | 国产一区二三区好的 | 中文在线a天堂 | 色婷婷综合久久久中文字幕 | av片中文字幕 | 国产精品美女久久久久久久久 | 久久黄色小说 | 99色免费视频 | 日日干网址 | 国产精品乱码一区二区视频 | 久草网免费 | 久久免费视频8 | 日韩精品在线一区 | 国产成人综合图片 | 久久综合成人网 | 亚洲成人资源在线观看 | 国产黄色一级大片 | 亚洲精品小视频 | 色偷偷888欧美精品久久久 | 天天草天天 | 日韩精品久久久免费观看夜色 | 久久久久久久99精品免费观看 | 国产小视频在线免费观看视频 | 精品国产aⅴ一区二区三区 在线直播av | 在线国产福利 | 亚洲欧美乱综合图片区小说区 | 在线观看黄色大片 | 久草久视频 | 亚洲婷婷伊人 | 91久久精品一区 | 999久久久久久久久 69av视频在线观看 | 97理论片| 伊人国产在线观看 | 九色视频自拍 | 国产高清永久免费 | 午夜精品久久久久久 | 免费看十八岁美女 | 韩国精品在线观看 | 国产亚洲在线 | 免费在线观看成人小视频 | 久久中文字幕导航 | 在线播放国产精品 | 人人插人人插 | 五月婷婷综合色拍 | 日日干美女| 免费又黄又爽视频 | 91精品国自产在线 | 午夜久久网站 | 亚洲播放一区 | 国产午夜精品久久久久久久久久 | 久久日本视频 | 久久久久一区二区三区四区 | 成人a免费视频 | 99视频导航 | 亚州天堂| 亚洲精品www久久久久久 | 久久综合操 | 黄色在线视频网址 | 成片免费观看视频大全 | 亚洲精品国产区 | 国产在线精品二区 | ww视频在线观看 | 国产黄色资源 | 日韩在线三区 | 亚洲高清国产视频 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲午夜精 | 69热国产视频 | 亚洲综合色视频 | 日韩狠狠操 | 色综合网在线 | 国产999精品久久久久久 | 黄色的片子 | 成人av片在线观看 | 毛片激情永久免费 | 国产精品原创av片国产免费 | 日韩av影视在线 | 国内少妇自拍视频一区 | 天天草av| 久草精品在线观看 | 精品久久久久久久久久久久久久久久 | 91人人人 | 国产午夜精品av一区二区 | 中文字幕在线高清 | 国产欧美日韩一区 | 成人免费在线观看电影 | 国产色婷婷精品综合在线手机播放 | 亚洲久久视频 | 视频在线观看入口黄最新永久免费国产 | 久久成人一区二区 | 久久久国产成人 | 毛片网站免费在线观看 | 中文字幕在线影院 | 麻豆成人网 | 在线日本看片免费人成视久网 | 18国产精品福利片久久婷 | 精品一区二区在线看 | 亚洲精品乱码白浆高清久久久久久 | 欧美黄色特级片 | 91久久久国产精品 | 欧美一级片在线观看视频 | 亚洲黄色免费网站 | 六月天色婷婷 | 最新日韩视频在线观看 | 在线av资源| 在线观看亚洲精品视频 | 91在线播放综合 | 色婷婷狠狠干 | 亚洲最新精品 | 国产精品69久久久久 | 操操日日 | 一 级 黄 色 片免费看的 | 亚洲自拍偷拍色图 | 又爽又黄又无遮挡网站动态图 | 国内精品99 | 国产黄在线看 | 国产成人1区 | 日批网站在线观看 | 国产精品一区二区吃奶在线观看 | 亚洲免费在线视频 | 亚洲欧美综合 | 美女性爽视频国产免费app | 婷婷激情综合五月天 | www最近高清中文国语在线观看 | 色婷婷久久久 | 久久99久久99精品免费看小说 | 在线观看一区 | 韩日电影在线观看 | 久久一区精品 | 国产99爱| 欧美一级黄色网 | 深夜国产在线 | 激情欧美一区二区免费视频 | 中文国产成人精品久久一 | 91夫妻视频 | 久久久久伦理电影 | www.午夜| 精品产品国产在线不卡 | 成 人 黄 色 免费播放 | 亚洲成熟女人毛片在线 | 欧美精品黑人性xxxx | 91精品在线观看视频 | 又黄又刺激又爽的视频 | 国产精品 中文字幕 亚洲 欧美 | 午夜在线资源 | 高清一区二区 | 久久99久国产精品黄毛片入口 | 免费av一级电影 | av中文字幕网站 | 欧美精品三级 | 国产高清永久免费 | 99久久精品免费看国产四区 | 免费在线观看av | 国产婷婷一区二区 | 亚洲欧美在线观看视频 | 日日摸日日碰 | 97在线视频免费播放 | 91插插视频 | 久草在线免费看视频 | 国产高清在线一区 | 亚洲激情六月 | 日本三级不卡视频 | 日本精品va在线观看 | 亚洲三级毛片 | 丁香六月婷婷综合 | 亚洲va在线va天堂va偷拍 | 久草视频在线观 | 亚洲美女精品区人人人人 | 69国产成人综合久久精品欧美 | 在线观看国产区 | 日韩在线免费高清视频 | 黄色一级动作片 | 久久精品人人做人人综合老师 | 欧美日韩伦理在线 | 日日夜夜狠狠操 | 久草视频看看 | 成人a级免费视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日本激情视频中文字幕 | 日韩欧美69| 亚洲精品中文在线 | 中文字幕av最新更新 | 韩国av电影网 | 精品国产1区 | 精品国产一区二区三区四区在线观看 | 久草在线高清视频 | www免费网站在线观看 | 日韩免费一区二区三区 | 综合色狠狠 | 亚洲精品字幕在线观看 | 久久精品首页 | www.午夜色.com | 色婷婷视频在线观看 | 免费国产黄线在线观看视频 | 国产美腿白丝袜足在线av | 麻豆视频免费看 | 午夜精品久久久久久久久久久久久久 | 国产资源在线免费观看 | 精品福利网站 | 蜜臀久久99精品久久久无需会员 | 亚洲精品国产综合99久久夜夜嗨 | 亚洲欧美日韩精品久久久 | 色网站在线免费 | 久久999久久 | 亚洲 成人 一区 | 日韩av成人免费看 | 亚洲一区精品人人爽人人躁 | 亚洲在线网址 | 国产精品国产精品 | 天堂av在线免费观看 | 91av中文字幕 | 男女啪啪视屏 | 九九在线免费视频 | 国产经典 欧美精品 | 日韩激情视频在线观看 | 亚洲激色 | 亚洲精品免费观看视频 | 成人在线观看你懂的 | 亚洲电影在线看 | 999精品视频 | 国产精品国内免费一区二区三区 | 奇米影视777四色米奇影院 | 国产精品久久久久av福利动漫 | 日本天天操 | 久艹视频在线观看 | 免费观看完整版无人区 | 国产精品麻豆果冻传媒在线播放 | 日日婷婷夜日日天干 | 91福利视频网站 | av在线中文 | 超碰在线天天 | av三级在线免费观看 | 亚洲jizzjizz日本少妇 | 女人高潮特级毛片 | 精品国产乱码久久久久久三级人 | 免费精品在线 | 日日碰夜夜爽 | 日韩特级黄色片 | 国产日本在线 | 免费一级片在线观看 | 精品久久电影 | 超碰在线98 | a在线观看视频 | 精品久久视频 | 91网在线看 | 欧美中文字幕久久 | 天天躁天天操 | 婷婷国产一区二区三区 | 国产精品久久久久久a | 黄污网| 99精品在线免费在线观看 | 国产涩涩在线观看 | 在线免费视频一区 | 国产精品福利在线观看 | 97人人添人澡人人爽超碰动图 | 91av视频在线免费观看 | 91麻豆免费视频 | 国产原创在线 | 欧美日韩中文字幕视频 | 丁香婷婷激情五月 | 国产精品免费视频观看 | 日韩在线免费播放 | 亚洲一区美女视频在线观看免费 | 亚洲女同videos| 91人人澡人人爽 | 日韩黄色在线电影 | 久久69精品久久久久久久电影好 | av在线官网| 日韩电影在线观看一区二区三区 | 日韩色视频在线观看 | 欧女人精69xxxxxx | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品18久久久久久久久久久久 | 久久99久久99精品免观看软件 | 在线高清av | 97精品国产手机 | 在线免费黄| 一区二区三区免费在线观看视频 | 成人影片免费 | 少妇搡bbbb搡bbb搡aa | 在线观看日本高清mv视频 | 欧美一二三视频 | 国产二区免费视频 | 久久情爱 | 狠狠狠色丁香婷婷综合激情 | 国产精品久久久久久久久久妇女 | 人人狠狠综合久久亚洲婷 | 久久久官网 | 精品一区精品二区 | 天天干天天想 | 超碰日韩在线 | 在线网址你懂得 | 天天干天天操天天爱 | 欧美一级视频在线观看 | 黄色日本片 | 99爱视频 | 成人一区不卡 | 六月丁香在线视频 | 91网在线| 欧美成年人在线视频 | 99精品视频99 | 在线小视频你懂的 | 国产中文在线字幕 | 欧美色黄| 伊人国产视频 | 久久成人综合视频 | 特级毛片爽www免费版 | 日韩在线一级 | 精品在线免费观看 | 久久免费电影网 | 免费手机黄色网址 | 久久不见久久见免费影院 | 国产91综合一区在线观看 | 欧美91精品国产自产 | 国产精品久久三 | 欧美午夜久久久 | 色综合天天 | 天天在线视频色 | 国产视频亚洲 | 99国产精品一区二区 | 在线黄色毛片 | 久久免费av电影 | 日韩剧情 | 99产精品成人啪免费网站 | 国产精品一区二区免费 | 国产亚洲精品中文字幕 | 欧美激情综合五月色丁香小说 | 国产精品久久久久久99 | 九色精品在线 | 亚州欧美精品 | 69国产盗摄一区二区三区五区 | 亚洲精品在线观看不卡 | 西西人体4444www高清视频 | 久久久久久久久久久综合 | 天天操天天操天天操天天操天天操天天操 | 国产视频九色蝌蚪 | 91麻豆传媒 | 日日夜夜天天干 | 久久综合九色综合97婷婷女人 | 一级黄色毛片 | 国产中文在线播放 | 欧美日韩国产页 | 在线日韩中文字幕 | 精品久久久久久综合 | 日韩av一区二区三区在线观看 | 日韩欧美高清免费 | 视频在线观看91 | 国产精品欧美久久 | 伊人五月在线 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 日韩三级在线观看 | 国产精品视频免费在线观看 | 久草在线视频首页 | 国产美女黄网站免费 | 中文超碰字幕 | 人人搞人人爽 | 欧美日韩视频网站 | 久久dvd| 91理论片午午伦夜理片久久 | 精品国产乱码久久 | 婷婷色网视频在线播放 | 99热手机在线 | 日韩动漫免费观看高清完整版在线观看 | 在线av资源 | 天天干,夜夜爽 | 美女网站免费福利视频 | 日韩在线三级 | 二区三区中文字幕 | 97视频亚洲| www.狠狠操.com| 色av男人的天堂免费在线 | 中文字幕日韩在线播放 | 99视频播放 | 亚洲精品伦理在线 | 国产午夜在线观看视频 | 国产精品 9999 | 天堂在线视频免费观看 | 国内精品久久久久影院优 | 黄色小说网站在线 | 日韩色av色资源 | 在线观看亚洲国产 | 久久国产女人 | 狠狠综合网 | av免费片 | 91色在线观看视频 | 中文字幕在线观看第一页 | 国产精品一级视频 | 色网站国产精品 | 99久久9| 免费观看的av网站 | www久久久| 欧美超碰在线 | 97av在线视频 | 久久免费毛片视频 | 最近中文字幕国语免费高清6 | 超碰个人在线 | 免费在线 | 国产精品免费一区二区 | av天天干 | 亚洲婷婷丁香 | 一二三精品视频 | 亚洲精品乱码白浆高清久久久久久 | 国产尤物视频在线 | 精品二区视频 | 一级特黄av | 天天操天天射天天 | 亚洲做受高潮欧美裸体 | 国产精品久久久久久久电影 | 狠狠躁日日躁夜夜躁av | 玖玖视频精品 | 国产性天天综合网 | 午夜美女视频 | 网站免费黄| 91最新网址在线观看 | 午夜婷婷网 | 日韩高清在线一区 | 伊人午夜视频 | 色中色资源站 | 91香蕉视频在线下载 | 国产精品人成电影在线观看 | 久久99热这里只有精品国产 | 欧美激情精品久久久久久变态 | 蜜臀久久99精品久久久酒店新书 | 欧美热久久| 日韩精品五月天 | 精品99在线视频 | 97视频中文字幕 | 欧美三级高清 | www黄com | 一级久久精品 | 国产18精品乱码免费看 | 精品999| 久久久受www免费人成 | 在线看黄色的网站 | 国产视频一区二区在线观看 | 国产夫妻自拍av | 欧美一区二区在线免费观看 | 天天干天天操天天操 | a'aaa级片在线观看 | 97国产 | 国产精品手机播放 | 九九欧美 | 欧美污污网站 | 日韩精品三区四区 | 中文字幕国产视频 | 白丝av免费观看 | 玖玖爱在线观看 | 丁香婷婷激情 | 久要激情网 | av网站在线观看免费 | 中文资源在线官网 | 国产亚洲视频在线观看 | 日韩欧美v | 在线观看网站你懂的 | 99自拍视频在线观看 | 亚洲欧洲一级 | 在线免费观看视频 | 久久久蜜桃 | 黄色一级在线观看 | 欧美日韩一区二区在线观看 | 亚洲精品永久免费视频 | 国产精品国产三级在线专区 | 成人av电影免费在线播放 | 99久久久久久国产精品 | 日韩精品一区二区三区中文字幕 | 在线国产激情视频 | 国产成人精品一区二 | 天天操天天是 | 国产精品国产亚洲精品看不卡 | 精品五月天| 久久精品3 | 日韩欧美在线一区 | 91麻豆精品 | 成人免费在线电影 | 日韩免费播放 | 91桃色国产在线播放 | 成人黄色国产 | 日韩高清av在线 | 91chinese在线| 91av影视| 99视频播放 | 国内视频在线观看 | 久久久夜色 | 国产免费精彩视频 | 亚洲国产一二三 | 97在线免费视频 | 久久最新网址 | 久久69av| 国产成人精品一区二区 | 一级黄色a视频 | 国产自在线 | 九九国产视频 | 一区二区三区四区五区在线 | 在线看片91 | 1024久久| 丁香影院在线 | 久久久久久久久久久综合 | 色噜噜狠狠狠狠色综合 | 久久久久久久久久福利 | 久久久久成人精品亚洲国产 | 精品成人a区在线观看 | 久久视频在线观看中文字幕 | 久久婷五月 | 国产精品2区 | 久久国产精品99精国产 | 91亚·色| 男女激情片在线观看 | 九九九九九九精品 | 一级成人在线 | 久久久久久久久久久黄色 | 999国产| 日本三级大片 | 欧美专区国产专区 | 久久99国产综合精品免费 | 亚洲欧美精品一区二区 | www.日本色 | av丝袜美腿 | 日韩在线视 | 精品一二区 | 日韩欧美高清一区二区 | 天天天干| 久久久香蕉视频 | 午夜国产福利在线 | 四虎影视成人永久免费观看亚洲欧美 | 999成人 | 日韩电影在线观看一区二区三区 | 日韩在线色视频 | 国内久久视频 | 亚洲1区在线 | 久草久草视频 | 人人草在线观看 | 亚洲免费一级 | 黄污视频大全 | 999精品网 | 在线观看久 | 免费a视频 | 色综合久久天天 | 亚洲精区二区三区四区麻豆 | 国产高清 不卡 | 国产成人免费精品 | 97视频免费看 | 色七七亚洲影院 | 特级毛片在线 | 中文字幕中文 | 麻豆视频在线免费观看 | 日免费视频 | 午夜精品视频在线 | 99精品在线看 | 日韩精品专区在线影院重磅 | 久久a级片 | 亚洲第一久久久 | 又黄又爽的免费高潮视频 | 免费手机黄色网址 | 久热精品国产 | av黄色免费在线观看 | 久久成电影 | 久久视屏网 | 日日操日日干 | 天天玩天天干天天操 | 麻豆视频免费在线播放 | 欧美伦理电影一区二区 | 国产小视频在线免费观看视频 | 精品视频97| 国产精品123 | 色丁香综合 | 欧美不卡视频在线 | 99精品一级欧美片免费播放 | 久久久久久久久久久精 | 99久久精品免费看国产一区二区三区 | 菠萝菠萝在线精品视频 | 久草影视在线 | 五月天婷婷在线观看视频 | 99精品在线看 | av免费电影网站 | 国产精品观看在线亚洲人成网 | 99国产精品久久久久久久久久 | 国产成年免费视频 | 91日韩精品一区 | 中文字幕在线看 | 免费a视频 | 久久久久国产精品厨房 | 欧美久久久一区二区三区 | 97涩涩视频| 日韩成人高清在线 | 欧美一级小视频 | 婷婷久久久 | av在线永久免费观看 | 国产精品一区二区在线观看免费 | av片在线观看免费 | 五月天激情在线 | 日韩欧美一区二区三区在线观看 | 99精品在线看 | 99在线看| 亚洲精品在线视频网站 | 丁香花中文字幕 | 国产成人精品久久久久蜜臀 | 久久久噜噜噜久久久 | 亚洲资源在线 | 日日草视频 | 波多野结衣视频一区二区三区 | 日韩丝袜在线 | 不卡视频在线看 | 五月天婷婷免费视频 | 狠狠综合久久av | 久久天天躁狠狠躁夜夜不卡公司 | 欧美aa一级| 玖操| 97热在线观看| 波多野结衣视频一区二区三区 | 久久久精品福利视频 | 97超碰国产精品女人人人爽 | 97精品久久人人爽人人爽 | jizzjizzjizz亚洲 | 97视频在线免费播放 | 午夜在线免费观看 | 国产精品a久久 | 五月婷婷综合在线 | 久久综合天天 | 一级免费黄视频 | 久久精品第一页 | 99久久综合狠狠综合久久 | 日本黄色大片儿 | 九色91在线 | 狠狠狠狠狠狠狠干 | 国产精品网红直播 | 夜夜操夜夜干 | 中文字幕一区二区三区四区久久 | 久久99国产精品自在自在app | 精品国产乱码久久久久 | 不卡视频在线 | 韩国av一区 | 99精品视频在线观看免费 | 日韩精品一区二区三区不卡 | 欧美一级电影免费观看 | 四虎成人在线 | 亚洲丝袜一区 | www视频在线播放 | 韩日av一区二区 | 国产爽妇网 | 亚洲成人av免费 | 日日天天狠狠 | 一级黄色大片在线观看 | 日韩三级av| 人人射网站 | 欧美在一区 | 国产精品日韩久久久久 | 2020天天干天天操 | 国产在线2020 | 91正在播放 | 国产伦理久久精品久久久久_ | 中文字幕av日韩 | 婷婷伊人综合亚洲综合网 | 92av视频| 国产久草在线 | 欧美一级看片 | 韩日电影在线观看 | 四虎海外影库www4hu | 国产剧情一区二区 | 久久精品网站免费观看 | 免费能看的黄色片 | 久久久久免费网站 | 一区二区三区动漫 | 亚洲精品国偷拍自产在线观看蜜桃 | 天天人人综合 | 国产一区二区三区 在线 | 国产录像在线观看 | 在线观看黄污 | 人人射人人插 | 99色人| www夜夜操com | 午夜精品久久久久久久99婷婷 | av综合站| 丁香激情综合国产 | 久久理论电影网 | 国产精品成人免费精品自在线观看 | 日本黄网站 | 国产99久久久国产精品 | 91看片在线看片 | 久久蜜臀av| 久久手机精品视频 | 免费视频在线观看网站 | 91尤物国产尤物福利在线播放 | 欧美日韩xx | 亚洲精品美女久久 | 91成人精品 |