| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:DPIn Reply To:枚举+矩阵乘法链,为什么WA,请教大牛? Posted by:060341125 at 2008-10-07 22:42:45 > #include <iostream>
> using namespace std;
> int main()
> {
> int n;
> cin>>n;
> int *num=new int[n];
> char *sym=new char[n];
> int *tnum=new int[n];
> int *tsym=new int[n-1];
>
> int *res=new int[n];
> int ans;
> int max=-(1<<30);
>
> int i,j;
> for(i=0;i<n;i++)
> {
> cin>>sym[i];
> cin>>num[i];
> }
>
> int **opt=new int*[n];
> for(i=0;i<n;i++)
> opt[i]=new int[n];
>
> for(int sep=0;sep<n;sep++)
> {
> tnum[0]=num[sep];
> for(i=(sep+1)%n,j=1;i!=sep;i=(i+1)%n,j++)
> {
> tnum[j]=num[i];
> tsym[j-1]=sym[i];
> }
>
> for(i=0;i<n;i++)
> opt[i][i]=tnum[i];
>
> for(int d=2;d<=n;d++)
> {
> for(int s=0;s<=n-d;s++)
> {
> int t=-(1<<30);
> for(int pos=s;pos<s+d-1;pos++)
> {
> int res=opt[s][pos]*opt[pos+1][s+d-1];
> if(tsym[pos]=='t')
> res=opt[s][pos]+opt[pos+1][s+d-1];
> if(res>t)
> t=res;
> }
> opt[s][s+d-1]=t;
> }
> }
>
> if(opt[0][n-1]>max)
> {
> max=opt[0][n-1];
> res[0]=sep+1;
> ans=1;
> }
> else if(opt[0][n-1]==max)
> {
> res[ans]=sep+1;
> ans++;
> }
> }
>
> cout<<max<<endl;
> for(i=0;i<ans;i++)
> cout<<res[i]<<" ";
> cout<<endl;
>
> delete[] num;
> delete[] sym;
> delete[] tnum;
> delete[] tsym;
> delete[] res;
>
> for(i=0;i<n;i++)
> delete[] opt[i];
> delete[] opt;
>
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator