CSP模拟赛#3 分段(T1-26)
Posted zbsy-wwx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP模拟赛#3 分段(T1-26)相关的知识,希望对你有一定的参考价值。
#include<cstdio> #include<iostream> #include<cstring> #define int long long using namespace std; const int MAXN=4e3,INF=2e9; char str[MAXN]; int w[MAXN]; int a[MAXN][MAXN];//l r int n; int getValue(int l,int r){ if(l>r)return 0; if((r-l+1)%2!=0)return INF; int rest=0; if(str[l-1]!=str[r-1])rest=min(w[l],w[r]); return getValue(l+1,r-1)+rest; } void init(){ memset(a,0,sizeof(a)); for(int l=1;l<=n;l++){ for(int r=l+1;r<=n;r++){ if((l%2)==0)continue; a[l][r]=getValue(l,r); //printf("a[%lld][%lld]=%lld ",l,r,a[l][r]); } } } int f[MAXN]; void test(){ init(); memset(f,0x3f,sizeof(f)); f[2]=a[1][2]; f[0]=0; for(int i=2;i<=n;i+=2){ for(int j=0;j<=i-2;j+=2){ f[i]=min(f[i],f[j]+a[j+1][i]); //printf("f[%d]=%d ",i,f[i]); } } cout<<f[n]<<endl; } signed main(){ scanf("%lld",&n); cin>>str; for(int i=1;i<=n;i++){ cin>>w[i]; } test(); return 0; }
以上是关于CSP模拟赛#3 分段(T1-26)的主要内容,如果未能解决你的问题,请参考以下文章