聪明的kk(nyoj 171)

来源:互联网 发布:python 测试脚本 编辑:程序博客网 时间:2024/05/12 18:04

聪明的kk

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

………………(省略)小动物“KK”正从沙漠区域(矩形)的左上角沿着向右或向下的方向往右下角跑去。KK太聪明了,它居然能在跑的过程中会选择吃掉尽可能多的虫子线路。你知道它吃掉多少虫子吗?

输入
第一行:N M (1≤N M≤20 0≤Xij≤500(i=1,2„.N, j=1,2„,M)
)表示沙漠是一个N*M的矩形区域
接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的虫子数(单个空格隔开)
假设“KK”只能向右走或向下走。
输出
输出有一个整数, 表示“KK”吃掉最多的虫子数。
样例输入
3 43 1 2 85 3 4 61 0 2 3
样例输出
24
状态转移方程:dp[ i ] [ j ] = a[ i ] [ j ]  + max(dp[ i ] [ j  - 1], dp[ i - 1 ][ j ] )

#include <stdio.h>int a[25][25];int dp[25][25];int max(int i, int j){return i > j ? i : j;}int main (void){int x, y, i, j;while(scanf("%d %d", &x, &y) != EOF){for(i = 0; i < x; i++)for(j = 0; j < y; j++)scanf("%d", &a[i][j]);dp[0][0] = a[0][0];for(i = 0; i < x; i++){for(j = 0; j < y; j++){if(i - 1 >= 0 && j - 1 >= 0)dp[i][j] = a[i][j] + max(dp[i][j - 1], dp[i - 1][j]);else if(i - 1 < 0)dp[i][j] = a[i][j] + dp[i][j - 1];else if(j - 1 < 0)dp[i][j] = a[i][j] + dp[i - 1][j];}}printf("%d\n", dp[x - 1][y - 1]);}return 0;}




0 0
原创粉丝点击