BZOJ4922 Karp-de-Chant Number__BZOJ

來源:互聯網
上載者:User

這題真是tmd……讓我想起了做bohater時候的絕望

還好最後A了

注意到每個括弧序列相當於必須在當前首碼和>=x的情況下才能選,選完之後首碼和會+y

那麼就是bohater原題了,按那道題的順序排序一下,然後DP即可,f[i][j]表示只用前i個串首碼和為0的最長長度

答案為f[n][0]

#include<iostream>#include<cstring>#include<ctime>#include<cmath>#include<algorithm>#include<iomanip>#include<cstdlib>#include<cstdio>#include<map>#include<bitset>#include<set>#include<stack>#include<vector>#include<queue>using namespace std;#define MAXN 310#define MAXM 1010#define ll long long#define eps 1e-8#define MOD 1000000007#define INF 1000000000struct data{int x;int y;int len;};int n;char s[MAXN];int f[MAXN][MAXN*MAXN];data a[MAXN];data b[MAXN];int tot1,tot2;int ans;bool cmp1(const data &x,const data &y){return x.x<y.x;}bool cmp2(const data &x,const data &y){return x.x+x.y>y.x+y.y;}int main(){int i,j;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%s",s+1);a[i].x=0;int now=0;for(j=1;s[j];j++){now+=s[j]=='('?1:-1;a[i].x=max(a[i].x,-now);}a[i].len=j-1;a[i].y=now;}for(i=1;i<=n;i++){if(a[i].y>=0){a[++tot1]=a[i];}else{b[++tot2]=a[i];}}if(tot1){sort(a+1,a+tot1+1,cmp1);}if(tot2){sort(b+1,b+tot2+1,cmp2);}memset(f,0xef,sizeof(f));f[0][0]=0;for(i=1;i<=tot2;i++){a[tot1+i]=b[i];}int s=0;for(i=1;i<=n;i++){for(j=0;j<=s;j++){f[i][j]=f[i-1][j];}for(j=a[i].x;j<=s;j++){f[i][j+a[i].y]=max(f[i][j+a[i].y],f[i-1][j]+a[i].len);}s+=a[i].len;}printf("%d\n",f[n][0]);return 0;}/**/


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.