64. Minimum Path Sum

本文详细解析了如何求解从网格左上角到右下角的最小路径和问题,采用动态规划方法,通过逐步更新每个格子的最小路径和来找到最终答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

这是一道动态规划的题目。去年在基因组大数据课上第一次接触动态规划(之前没有学过算法的小白),所以好有点印象,这道题和昨天那道计算有多少条路线的题目区别在于:一个是统计多少条路径,一个是累加value;累加value的时候在左边和上面的格子里取最小值。但是要注意因为会出现i-1和j-1,所以需要进行判断。

public int minPathSum(int[][] grid) {
        if(grid==null)
            return 0;
        int m = grid.length;
        int n = grid[0].length;
        int[][] res = new int[m][n];        
        res[0][0]=grid[0][0];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(i==0&&j>0)
                    res[i][j]=res[i][j-1]+grid[i][j];
                if(j==0&&i>0)
                    res[i][j]=res[i-1][j]+grid[i][j];
                else if(i>0&&j>0)
                    res[i][j]=Math.min(res[i-1][j],res[i][j-1])+grid[i][j];                
            }
        }
        return res[m-1][n-1];
    }




<think>好的,我现在需要解决用户在使用ArcGIS的Python 2.7.14脚本时遇到的运行时错误。用户的问题出现在计算相关系数后,打印统计摘要时,Describe对象没有minimum和maximum属性,导致AttributeError。 首先,我应该回忆一下arcpy.Describe函数的功能。Describe通常用于获取数据集的属性,比如栅格数据的格式、范围等,但可能不直接提供统计值如最小值和最大值。用户代码中使用arcpy.Describe(r.save(...))后的描述对象来获取min和max,这可能不正确,因为Describe可能不包含这些统计信息。 接下来,正确的做法应该是使用Raster对象的getRasterInfo()方法,或者使用arcpy.GetRasterProperties_management工具来获取统计信息。比如,用户可能需要调用arcpy.CalculateStatistics_management先计算统计值,再通过GetRasterProperties获取具体的min和max。 另外,用户代码中保存栅格后,可能需要先计算统计信息,否则统计值可能不存在。原代码中可能在保存后立即尝试获取统计值,但此时统计信息尚未生成,导致错误。因此,应该在保存栅格后调用CalculateStatistics,然后再用GetRasterProperties来获取最小和最大值。 同时,用户的环境可能存在栅格统计信息未自动计算的情况,尤其是在脚本中生成新栅格后。所以显式地计算统计信息是必要的步骤。 另外,检查用户代码中的路径是否正确,确保输出栅格已经正确保存,并且有权限访问。不过根据错误信息,问题更可能出在获取统计的方式上,而不是路径问题。 最后,修改代码的步骤应该是:在保存栅格后,使用arcpy.CalculateStatistics_management,然后使用arcpy.GetRasterProperties_management分别获取min和max属性,并确保使用正确的语法,如将路径传递给这些函数。 总结修改步骤为:替换Describe为GetRasterProperties,并添加CalculateStatistics确保统计信息存在。同时,处理可能的异常或路径问题,确保代码兼容Python 2.7和ArcMap的环境。</think>=== 修正后的代码 === ```python # 计算相关系数(保持原有计算逻辑) cov_sum = Raster(os.path.join(output_gdb, "cov_sum")) k_std = Raster(os.path.join(output_gdb, "k_std")) t_std = Raster(os.path.join(output_gdb, "t_std")) r = cov_sum / (23 * k_std * t_std) r = Con(r < -1, -1, Con(r > 1, 1, r)) # 强制限制值域[-1,1] r.save(os.path.join(output_gdb, "k_t_correlation")) # === 关键修改:使用栅格属性获取方法 === # 先强制计算统计值(避免统计信息未生成) arcpy.CalculateStatistics_management( in_raster=os.path.join(output_gdb, "k_t_correlation"), skip_existing=False # 强制重新计算 ) # 获取最小值最大值(正确方法) r_min = arcpy.GetRasterProperties_management( in_raster=os.path.join(output_gdb, "k_t_correlation"), property_type="MINIMUM" ).getOutput(0) r_max = arcpy.GetRasterProperties_management( in_raster=os.path.join(output_gdb, "k_t_correlation"), property_type="MAXIMUM" ).getOutput(0) # 打印结果(保留两位小数) safe_print(u"相关系数计算完成!值范围:{:.2f} ~ {:.2f}".format(float(r_min), float(r_max))) ``` === 错误原因解析 === 1. **Describe对象无统计属性**:`arcpy.Describe()` 返回的元数据对象不直接包含栅格统计值(如最小值/最大值),它主要用于描述数据格式、坐标系等基础属性 2. **正确的统计获取方式**: - 先用 `CalculateStatistics` 生成统计信息 - 再通过 `GetRasterProperties` 提取具体属性 3. **强制类型转换**:`GetRasterProperties` 返回的是字符串类型,需转换为 `float` 才能格式化输出 === 操作建议 === 1. 确保输出文件夹 (`output_gdb`) 有写入权限 2. 如果栅格数据量较大,可在 `CalculateStatistics` 中添加 `x_skip_factor` 和 `y_skip_factor` 参数加速计算(例如设置为10) 3. 在 ArcMap 的 Python 窗口中运行时,建议先执行 `arcpy.CheckOutExtension("Spatial")` 激活 Spatial Analyst 扩展 **验证方法**:在 ArcMap 中手动右键点击生成的 `k_t_correlation` 栅格 → 属性 → 源选项卡,查看统计值是否与脚本输出一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值