zoukankan      html  css  js  c++  java
  • uva1366_Martian Mining_简单DP

     题目不难,却想了好长时间,目测自己DP还是很水。。。囧

     思路:舍f[i][j]为前i行j列的最大矿总量不难推出状态转移方程为f[i][j]=max(f[i-1][j]+line[i][j],f[i][j-1]+row[j][i])

     其中line[i][j]为第i行前j个A矿的和(a[i][1]+a[i][2]+...+a[i][j]),row[i][j]为第i列前j个B矿的和(b[i][1]+b[i][2]+...+b[i][j])

     result:

              

     代码如下:

    #include <cstdio>
    inline int max(int x,int y)
    {
        return x>y?x:y;
    }
    int a[510][510],b[510][510],f[510][510],n,m,line[510][510],row[510][510];
    int main()
    {
        int i,j;
        while (scanf("%d%d",&n,&m) && (n || m))
        {
            for (i=1; i<=n; ++i)
                for (j=1; j<=m; ++j)
                    scanf("%d",&a[i][j]);
            for (i=1; i<=n; ++i)
                for (j=1; j<=m; ++j)
                    scanf("%d",&b[i][j]);
            for (i=1; i<=n; ++i)
                for (j=1; j<=m; ++j)
                    line[i][j]=line[i][j-1]+a[i][j];
            for (i=1; i<=m; ++i)
                for (j=1; j<=n; ++j)
                    row[i][j]=row[i][j-1]+b[j][i];
            for (i=1; i<=n; ++i)
                for (j=1; j<=m; ++j)
                    f[i][j]=max(f[i-1][j]+line[i][j],f[i][j-1]+row[j][i]);
            printf("%d\n",f[n][m]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    【转载】$.ajax()方法详解
    【转载】"从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
    jQuery获取select的选中项value和text
    AIDL
    SAX
    AsyncTask
    Handler
    ViewSwitch
    TabActivity
    AlarmManager
  • 原文地址:https://www.cnblogs.com/Chierush/p/2993751.html
Copyright © 2011-2022 走看看