Hust oj 1812 小乐乐想出门(基础dp)

小乐乐想出门
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 248(158 users)Total Accepted: 193(154 users)Rating: Special Judge: No
Description
大家可能不知道,小乐乐的家好大好大,可是好乱好乱。下面那个矩阵就是她家的简化图,每一个格子表示一个房间,格子里的数字表示穿过这个房间需要的力气。小乐乐的卧室在左上角,而大门却在右下角。所以小乐乐得穿过一些房间才能出门。小乐乐有个习惯,她只会向下走或者向右走。小乐乐很懒,她想知道以最省力的方式出门需要花费多少力气?
Input
第一行输入一个整数n(1<n<1000)
随后n行,每行n个整数。表示小乐乐的家
其中,左上角和右下角保证为0.
Output
输出最小力气的值。
Sample Input
3
0 3 7
6 2 1
9 8 0
8
0 3253 3165 9415 3108 7744 8869 1768
347 6410 8 5465 9733 1529 2584 9148
552 8569 2569 288 7211 5335 6652 2144
8203 683 8868 7178 8045 3430 9283 6498
2196 5533 2772 2376 7221 1861 5743 647
217 2159 9000 5584 7908 3861 1064 7431
7444 6086 3073 9035 6379 3198 12 3916
7248 7482 7286 6824 9747 539 6282 0
Sample Output
6

35973


基础dp,状态转移方程很好想,但要注意边界处理,因为这个WA了一发

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int dp[1005][1005];
int a[1005][1005];
int Min(int y,int x)
{
    return x<y?x:y;
}
int main()
{
    int i,j,k;
    int n;
    while(cin>>n)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                cin>>a[i][j];
            }
        }
        dp[0][0]=a[0][0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(i==0&&j!=0)
                    dp[i][j]=dp[i][j-1]+a[i][j];
                else if(j==0&&i!=0)
                    dp[i][j]=dp[i-1][j]+a[i][j];
                else if(i!=0&&j!=0)
                    dp[i][j]=Min(dp[i-1][j],dp[i][j-1])+a[i][j];//状态转移方程
            }
        }
        cout<<dp[n-1][n-1]<<endl;
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值