讨论 / 是不是测试数据错了
87933801 2011-11-07 04:05:00
点我顶贴 收藏 删除
题目:[NOIP2000]方格取数

状态: Unaccepted

测评机: Xeond[6]

得分: 80分

提交日期: 2011-11-7 17:23:00

有效耗时: 219毫秒

测试结果1: 通过本测试点|有效耗时63ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 测试结果错误.错误结果为:23

正确结果应为:25

测试结果4: 通过本测试点|有效耗时46ms

测试结果5: 通过本测试点|有效耗时63ms

提交代码:

#include<iostream>

using namespace std;

int i,n,m,x,k=0;

struct r

{

int a[11][11],x[11][11];

}h;

int bj(int a,int b)

{

if(a>b)

return a;

else

return b;

}

void ql(int xx,int y)

{

h.a[xx][y]=0;

if((xx!=1)||(y!=1))

{

if(xx-1==0)

ql(xx,y-1);

else

if(y-1==0)

ql(xx-1,y);

else

if(bj(h.x[xx-1][y],h.x[xx][y-1])==h.x[xx-1][y])

ql(xx-1,y);

else

ql(xx,y-1);

}

}

int main()

{

cin>>m;

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

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

h.a[i][n]=0;

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

h.x[i][0]=h.x[0][i]=0;

cin>>i>>n>>x;

while(i!=0)

{

h.a[i][n]=x;

cin>>i>>n>>x;

}

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

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

h.x[i][n]=bj(h.x[i-1][n],h.x[i][n-1])+h.a[i][n];

k+=h.x[m][m];

ql(m,m);

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

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

h.x[i][n]=0;

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

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

h.x[i][n]=bj(h.x[i-1][n],h.x[i][n-1])+h.a[i][n];

cout<<k+h.x[m][m];

return 0;

}

#1 吴钰晗@2011-11-07 02:03:00
回复 删除
不能用这种,不最优,用枚举法。

#2 87933801@2011-11-07 04:05:00
回复 删除
#include<iostream>

using namespace std;

int i,n,m,x,k=0;

struct r

{

int a[11][11],x[11][11];

}h;

int bj(int a,int b)

{

if(a>b)

return a;

else

return b;

}

void ql(int xx,int y)

{

int k1=0,k2=0;

h.a[xx][y]=0;

if((xx!=1)||(y!=1))

{

if(xx-1==0)

ql(xx,y-1);

else

if(y-1==0)

ql(xx-1,y);

else

{

if(h.x[xx-1][y]>h.x[xx][y-1])

ql(xx-1,y);

if(h.x[xx-1][y]<h.x[xx][y-1])

ql(xx,y-1);

if(h.x[xx-1][y]==h.x[xx][y-1])

{

for(i=y+1;i<=m;i++)

k1+=h.a[xx-1][i];

for(i=xx+1;i<=m;i++)

k2+=h.a[i][y-1];

if(k1>k2)

ql(xx,y-1);

else

ql(xx-1,y);

}

}

}

}

int main()

{

cin>>m;

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

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

h.a[i][n]=0;

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

h.x[i][0]=h.x[0][i]=0;

cin>>i>>n>>x;

while(i!=0)

{

h.a[i][n]=x;

cin>>i>>n>>x;

}

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

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

h.x[i][n]=bj(h.x[i-1][n],h.x[i][n-1])+h.a[i][n];

k+=h.x[m][m];

ql(m,m);

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

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

h.x[i][n]=0;

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

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

h.x[i][n]=bj(h.x[i-1][n],h.x[i][n-1])+h.a[i][n];

cout<<k+h.x[m][m];

system("pause");

return 0;

}

查看更多回复
提交回复