| ||||||||||
| 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:一直wa, 这题不是枚举再dp吗? 大虾帮忙看看,感激.(内有代码)In Reply To:一直wa, 这题不是枚举再dp吗? 大虾帮忙看看,感激.(内有代码) Posted by:wronger at 2006-06-13 01:14:20 > #include <stdio.h>
> #include <stdlib.h>
> #define N 50
>
> int dp[N][N], a[N], result[N];
> char c[N+1];
>
> int compute(int x, int y, char ch){
> if(ch=='t') return x+y;
> else if(ch=='x') return x*y;
> }
>
> int main(){
> int i, j, k, t, now, max, n, atem, l, r, count;
> char ctem;
> while(scanf("%d", &n)==1){
> for(i=0; i<n; i++){
> getchar();
> c[i]=getchar();
> scanf("%d", &a[i]);
>
> }
> for(i=0; i<n; i++){
> if(i!=0){
> atem=a[0];
> ctem=c[0];
> for(j=0; j<n-1; j++){
> a[j]=a[j+1];
> c[j]=c[j+1];
> }
> a[j]=atem;
> c[j]=ctem;
> }
> for(j=0; j<n; j++) dp[j][j]=a[j];
> for(k=1; k<n; k++){
> for(j=0; j<n-k; j++){
> l=j; r=j+k;
> max=compute(dp[l][l], dp[l+1][r], c[l+1]);
> for(t=l+1; t<r; t++){
> now=compute(dp[l][t], dp[t+1][r], c[t+1]);
> if(now>max) max=now;
> }
> dp[l][r]=max;
> }
> }
> result[i]=dp[0][n-1];
> }
> max=result[0];
> for(i=1; i<n; i++){
> if(result[i]>max)
> max=result[i];
> }
> printf("%d\n", max);
> count=0;
> for(i=0; i<n; i++){
> if(result[i]==max){
> if(count>0) printf(" ");
> printf("%d", i+1);
> count++;
> }
> }
> printf("\n");
> }
> return 0;
> }
递推方程好像不对.......
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator