您的位置:首页 > 其它

NOIP2000 方格取数

2015-10-24 21:22 274 查看
题目描述:

某脑残A按横或纵坐标递增(不减)的方式从(1,1)=第一行第一列,在n*n的矩阵中走过2*n-1个方格到达(n,n),而且走两遍;

找出一种行走方式使得其走过的方格权和最大,输出最大权和;原题



样例:

8

2 3 13

2 6 6

3 5 7

4 4 14

5 2 21 

5 6 4

6 3 15

7 2 14

0 0 0

output:

67

样例二(补充):

3

1 1 1

1 2 9

1 3 1

3 1 1

3 2 9

3 3 1

0 0 0

output:

22

题解:

多线程动态规划;

啊,这是什么?

其实我也不知道,但这一题的想法是想象为两个人一起走,求最大权和;

状态 s [ x1 ] [ y1 ] [ x2 ] [ y2 ];

表示 A走到( x1,y1 )

         B走到( x2,y2)   时 能获得的最大权和;

转移很简单:

A,B分别走      (下,下) , (右,下),(下,右),(右,右)   时的最大值加上A,B当前位置的权;

若A,B同位置 s [ x1 ] [ y1 ] [ x1==x2 ] [ y1==y2 ] = max(s [ x1 ] [ y1+1 ] [ x2 ] [ y2+1 ],

                                                                                    s [ x1+1 ] [ y1 ] [ x2 ] [ y2+1 ].

                                                                                    s [ x1 ] [ y1+1 ] [ x2+1 ] [ y2 ],

                                                                                    s [ x1+1 ] [ y2 ] [ x2+1 ] [ y2 ],) + map [ x1
] [ y1 ];

若A,B不同位置 s [ x1 ] [ y1 ] [ x1 ] [ y1 ] = max(s [ x1 ] [ y1+1 ] [ x2 ] [ y2+1 ],

                                                                        s [ x1+1 ] [ y1 ] [ x2 ] [ y2+1 ].

                                                                        s [ x1 ] [ y1+1 ] [ x2+1 ] [ y2 ],

                                                                        s [ x1+1 ] [ y2 ] [ x2+1 ] [ y2 ],) + map [ x1 ] [ y1 ]+map [ x2 ] [ x2 ];

啊A,B是一起走的?

那么就有  x1 + y1 = x2 + y2

这样,y2的一维就多余了

我们只需要写 y2 = x1 + y1 -x2并且硬生生地从方程中将y2删去即可

这样就是O(n^3)对于n<=10,这就是0ms 

好,现在想多线程是什么......

就是两个人一起走......

NOI管道取珠也是这样的想法:

求ai^2

可以想象为两个人一起取,计算到达同一末状态时的总取法数;

一样的想法,同时也是一样的优化,又有一维可以直接推,又由O(n^4)->O(n^3)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: