NOIP 2008提高组第三题

题名:传纸条

可能是我太弱了一开始复杂度计算错了

结果花10min打了个暴力才30分

然后才开始想dp正解

首先纸条正反传一次的问题可以转化为正着满足条件的传2次

然后我们考虑一个状态 f[i][j][k][l]

i,j,k,l 表示正着第一次传到(i,j)第二次传到(k,l)时最优解为f[i][j][k][l]

那么转移方程就非常好写了

for (int i=1;i<=n;i++)
   for (int j=1;j<=m;j++)

    for (int k=1;k<i;k++)
       for (int l=j+1;l<=m;l++)
       {
             f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k-1][l]+a[i][j]+a[k][l]);
             f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l-1]+a[i][j]+a[k][l]);
             f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k-1][l]+a[i][j]+a[k][l]);
             f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l-1]+a[i][j]+a[k][l]);
       }

但是要注意边界的问题

1<=k<i

j+1<=l<=m

洛谷oj上的数据水所以即使你边界没考虑清楚也能A

但是noip就不一样了

ps:洛谷这题题解有几个都是边界有问题的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值