河南第三届ACM省赛(聪明的kk)

题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=171

思路:简单DP一下就行,都是正数,边界问题不用考虑

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>

const int inf = 0x7f7f7f7f;//2139062143
typedef long long ll;
using namespace std;

int dp[30][30];
int a[30][30];

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

标称(边输入边DP,很巧妙)

 
#include<iostream>
using namespace std;
int f[22][22];
int main()
{
	int n,m,c;
	cin>>m>>n;
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		{
			cin>>c;
			f[i][j]=max(f[i][j-1],f[i-1][j])+c;
		}
	cout<<f[m][n]<<endl;
}        



你可能感兴趣的:(河南第三届ACM省赛(聪明的kk))