【BZOJ】3997组合数学-dp

传送门:bzoj3997


代码

#include
#include
using namespace std;
typedef long long ll;
const int N=1010;
int a[N][N],T,n,m;
ll f[N][N],ans;
inline ll max(ll x,ll y){return x>y?x:y;}

int main(){
    scanf("%d",&T);
    while(T--){
        ans=0;
        memset(f,0,sizeof(f));
        scanf("%d%d",&n,&m);
        for(int j,i=1;i<=n;++i)
         for(j=1;j<=m;++j) 
           scanf("%d",&a[i][j]);
        for(int j,i=1;i<=m;++i){
            for(j=n;j;j--)
             f[j][i]=max(f[j][i-1],f[j+1][i-1]+a[j][i]);
            for(j=n;j;j--)
             f[j][i]=max(f[j][i],f[j+1][i]);
            ans=max(ans,f[1][i]);
        }
        printf("%lld\n",ans);
    } 
}

你可能感兴趣的:(【BZOJ】3997组合数学-dp)