再做能做出来了,可是无意义的地方debug了好久。。。2017年08月10日16:43:33
题目大意:给定n个数
每次可以从头或者尾取出数据
于是按取出来得顺序,就可以排成一个数列,假设这个数列为
a1,a2,a3,a4.......an
现在我们假设按照取出来的顺序有一个权值
w=a1*1+a2*2+a3*3+....an*n
现在需要编程求出,如何控制取数的顺序,让w的值最大。
int a[mxn];
int dp[mxn][mxn];
int main(){
int n;
//freopen("in.txt","r",stdin);
while(~sf("%d",&n)){
mem(a,0);
rep(i,1,n)sf("%d",&a[i]);
int ans=0;
for(int i=1;i<=n;++i){
for(int j=n;j>=i-1;--j){
//cout<<i<<' '<<j<<':'<<dp[i-1][j]+a[i-1]*(n-(j-i+1))<<' '<<dp[i][j+1])+a[j+1]*(n-(j-i+1));
dp[i][j]=max(dp[i][j],max(dp[i-1][j]+a[i-1]*(n-(j-i+1)),dp[i][j+1]+a[j+1]*(n-(j-i+1))));
ans=max(dp[i][j],ans);
//pf("%d ",dp[i][j]);
}//puts("");
}
pf("%d",ans);
}
}