请问这么写记忆化为什么不对

回复帖子

@yagyagyag 2020-06-30 12:27 回复
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
ll a[85][85],f[85][85];
ll solve(int x,int day,int l,int r,ll sum)
{
//  cout<<x<<" "<<day<<" "<<l<<" "<<r<<" "<<sum<<endl;
    if (day>m) return sum;
//  if (f[l][r]) return f[l][r];记忆化
    f[l][r]=max(solve(x,day+1,l+1,r,sum+a[x][l]*(1<<day)),solve(x,day+1,l,r-1,sum+a[x][r]*(1<<day)));
    return f[l][r];
}
int main()
{
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%lld",&a[i][j]);
    ll ans=0;
    for (int x=1;x<=n;x++){
        memset(f,0,sizeof f);
        solve(x,1,1,m,0);
//      cout<<f[1][m]<<endl;    
        ans+=f[1][m];   
    }
    cout<<ans<<endl;
    return 0;
 } 

有那个语句则有个数据是错的,没有那个语句会超时

@yagyagyag 2020-06-30 12:39 回复 举报

@w33z8kqrqk8zzzx33 不是的

2 10
96 56 54 46 86 12 23 88 80 43
16 95 18 29 30 53 88 83 64 67

这个数据,答案出来是316994

如果没有那个语句我程序答案是对的,有那个语句就是错的。

这个数据跟高精没关系吧?

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。