博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Beans(dp,两次dp)
阅读量:4672 次
发布时间:2019-06-09

本文共 2162 字,大约阅读时间需要 7 分钟。

Beans

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4141    Accepted Submission(s): 1964

Problem Description
Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the beans and collect the qualities, but everyone must obey by the following rules: if you eat the bean at the coordinate(x, y), you can’t eat the beans anyway at the coordinates listed (if exiting): (x, y-1), (x, y+1), and the both rows whose abscissas are x-1 and x+1.
Now, how much qualities can you eat and then get ?
 

 

Input
There are a few cases. In each case, there are two integer M (row number) and N (column number). The next M lines each contain N integers, representing the qualities of the beans. We can make sure that the quality of bean isn't beyond 1000, and 1<=M*N<=200000.
 

 

Output
For each case, you just output the MAX qualities you can eat and then get.
 

 

Sample Input
4 6 11 0 7 5 13 9 78 4 81 6 22 4 1 40 9 34 16 10 11 22 0 33 39 6
 

 

Sample Output
242
 

题解:一次对行dp,一次对列dp;

java超时了。。。c就不会

代码:

import java.util.Scanner;public class Beans {    static int a[] = new int[200010], dp[] = new int[200010], DP[] = new int[200010], b[] = new int[200010];    public static void main(String[] argvs){        int M, N;        Scanner cin = new Scanner(System.in);        while(cin.hasNext()){            M = cin.nextInt();            N = cin.nextInt();            for(int i = 0; i < M; i++){                DP[i] = 0;                for(int j = 0; j < N; j++){                    dp[j] = 0;                    a[j] = cin.nextInt();                    if(j < 2)                        dp[j] = a[j];                    else                         dp[j] = Math.max(dp[j - 2] + a[j], dp[j - 1]);                }                DP[i] = dp[N - 1];                if(i < 2)                    b[i] = DP[i];                else                    b[i] = Math.max(b[i - 2] + DP[i], b[i - 1]);            }            System.out.println(b[M - 1]);        }            }}

 

转载于:https://www.cnblogs.com/handsomecui/p/5478676.html

你可能感兴趣的文章
css选择器中:first-child与:first-of-type的区别
查看>>
nopcommerce 二次开发
查看>>
NHibernate入门实例
查看>>
IBM_DS5020磁盘阵列做raid、热备并把盘阵挂在服务器上的步骤
查看>>
svg制作风车旋转
查看>>
《软件工程》课堂作业:返回一个整数数组中最大字数组的和
查看>>
ACM 美素数 (没AC)
查看>>
Sqlserver学习研究
查看>>
VTK图形模型主要对象
查看>>
c# Linq实现 获得某一个路径下所有文件的名(不含扩展名)
查看>>
动静态广播的区别
查看>>
前缀式计算(前缀表达式)
查看>>
Linux常用命令大全
查看>>
添加删除tag
查看>>
ARM学习篇 中断定时理解
查看>>
卷积神经网络在tenserflow的实现
查看>>
[STL]用法
查看>>
PostgresException: 42883: function ifnull(integer, integer) does not exist
查看>>
python3 表情符号编码
查看>>
桥接模式
查看>>