【DP】和谐的奶牛(jzoj 1750)
生活随笔
收集整理的這篇文章主要介紹了
【DP】和谐的奶牛(jzoj 1750)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
和諧的奶牛
題目大意:
有一些括號(保證是合法的,合法:每一個左括號都有自己配對的有括號),現(xiàn)在要將這些括號分為兩組(其中一組可以為空),分完組后括號的順序要和原來的一樣,問有多少種方法使括號分組,結(jié)果要對2012取模
樣例輸入
(())樣例輸出
6數(shù)據(jù)范圍限制
數(shù)據(jù)說明:序列的長度是1到1000。
提示
說明:
The following breed assignments work:
解題思路:
這道題就是一道DP題,一開始我們用f[i][j][k]來表示,前i個括號,序列一和序列二左括號比右括號多的數(shù)目,但后來發(fā)現(xiàn)i+j是已經(jīng)確定的了,他們想加就是前i個左括號比右括號多的數(shù)目,所以我們只保留i和j,k就不保留了,然后選的時候就是f[i-1][j-a[i]](左括號是1,右括號是-1),不選的時候就是f[i-1][j]
代碼:
#include<cstdio> #include<iostream> #include<string> #include<cstring> using namespace std; int n,f[1005][505],a[1005],b[1005]; string str; int main() {cin>>str;n=str.size();//長度for (int i=1;i<=n;++i)if (str[i-1]=='(') a[i]=1,b[i]=b[i-1]+1;//記錄和求前綴和else a[i]=-1,b[i]=b[i-1]-1;f[0][0]=1;//預(yù)處理for (int i=1;i<=n;++i)for (int j=0;j<=b[i];++j)//最多能多出幾個f[i][j]=(f[i-1][j-a[i]]+f[i-1][j])%2012;//狀態(tài)轉(zhuǎn)移方程printf("%d",f[n][0]);return 0; }總結(jié)
以上是生活随笔為你收集整理的【DP】和谐的奶牛(jzoj 1750)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东超市发布39款食品生鲜年度趋势商品
- 下一篇: 【模拟】聊天服务器的外部流量