讨论 / 求助
sym111sym 2013-10-26 19:15:00
点我顶贴 收藏 删除
50分,求解

#include<stdio.h>

#include<stdlib.h>

int a[51][51][51][51]={0};

int work(int r,int s,int t,int m)

{

if(r>=s&&r>=t&&r>=m)return r;

if(s>=r&&s>=t&&s>=m)return s;

if(t>=r&&t>=s&&t>=m)return t;

if(m>=r&&m>=s&&m>=t)return m;

}

int main()

{

int i,j,n,m,k;

int b[51][51]={0};

scanf("%d%d",&n,&m);

for(i=1;i<=n;i++)

{

for(j=1;j<=m;j++)

{

scanf("%d",&b[i][j]);

}

}

for(i=3;i<m+n;i++)//起始点为1,1第一步后横纵坐标和为3,如(1,2)(2,1)

{

for(j=1;j<i;j++)

{

for(k=1;k<j;k++)//k<j判重

{

if((i-k-1!=i-j)&&(j-1!=k))

a[j][i-j][k][i-k]=work(a[j-1][i-j][k-1][i-k],a[j-1][i-j][k][i-k-1],a[j][i-j-1][k-1][i-k],a[j][i-j-1][k][i-k-1])+b[j][i-j]+b[k][i-k];

else

a[j][i-j][k][i-k]=work(a[j-1][i-j][k-1][i-k],-1,a[j][i-j-1][k-1][i-k],a[j][i-j-1][k][i-k-1])+b[j][i-j]+b[k][i-k];

}

}

}

printf("%d",a[n][m-1][n-1][m]);

system("pause");

return 0;

}

#1 jst123@2013-10-23 04:05:00
回复 删除
我有

#include<stdio.h>

#include<stdlib.h>

int a[51][51][51][51]={0};

int work(int r,int s,int t,int m)

{

if(r>=s&&r>=t&&r>=m)return r;

if(s>=r&&s>=t&&s>=m)return s;

if(t>=r&&t>=s&&t>=m)return t;

if(m>=r&&m>=s&&m>=t)return m;

}

int main()

{

int i,j,n,m,k;

int b[51][51]={0};

scanf("%d%d",&n,&m);

for(i=1;i<=n;i++)

{

for(j=1;j<=m;j++)

{

scanf("%d",&b[i][j]);

}

}

for(i=3;i<m+n;i++)//起始点为1,1第一步后横纵坐标和为3,如(1,2)(2,1)

{

for(j=1;j<i;j++)

{

for(k=1;k<j;k++)//k<j判重

{

if((i-k-1!=i-j)&&(j-1!=k))

a[j][i-j][k][i-k]=work(a[j-1][i-j][k-1][i-k],a[j-1][i-j][k][i-k-1],a[j][i-j-1][k-1][i-k],a[j][i-j-1][k][i-k-1])+b[j][i-j]+b[k][i-k];

else

a[j][i-j][k][i-k]=work(a[j-1][i-j][k-1][i-k],-1,a[j][i-j-1][k-1][i-k],a[j][i-j-1][k][i-k-1])+b[j][i-j]+b[k][i-k];

}

}

}

printf("%d",a[n][m-1][n-1][m]);

system("pause");

return 0;

}

#2 sym111sym@2013-10-26 19:15:00
回复 删除
回复 沙发jst123 的帖子

.......

查看更多回复
提交回复