AcWing 1015. 摘花生

这篇文章展示了如何使用Java编写一个程序,通过Scanner获取用户输入的二维数组,然后运用动态规划方法计算从左上角到右下角的最大路径和。

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

相关代码

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int a[][] = new int[110][110];
    static int f[][] = new int[110][110];
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int T = scan.nextInt();
        while(T-->0){
            int x = scan.nextInt();
            int y = scan.nextInt();
            for(int i=1;i<=x;i++){
                for(int j=1;j<=y;j++){
                    a[i][j] = scan.nextInt();
                }
            }
            
            for(int i=1;i<=x;i++){
                for(int j=1;j<=y;j++){
                    f[i][j] = Math.max(f[i-1][j]+a[i][j],f[i][j-1]+a[i][j]);
                }
            }
            
            System.out.println(f[x][y]);
        }
    }
}
### 关于C语言实现花生问题 以下是基于动态规划的思想,提供一种解决“花生”问题的C语言实现方案。通过构建二维数组存储路径中的最大值,并逐步更新最优解。 #### 动态规划的核心思想 为了求解 Hello Kitty 能够取的最大花生数量,可以采用动态规划方法。设 `dp[i][j]` 表示到达第 `(i,j)` 位置时所能获得的最大花生数。状态转移方程为: \[ dp[i][j] = \max(dp[i-1][j], dp[i][j-1]) + grid[i][j] \] 其中: - 如果当前位置是从上方移动过来,则其值等于上方格子的最大值加上当前格子的花生数; - 如果当前位置是从左方移动过来,则其值等于左方格子的最大值加上当前格子的花生数。 初始条件设置为起点处的花生数 \( dp[0][0] = grid[0][0] \)。 下面是完整的 C 语言代码实现: ```c #include <stdio.h> #define MAXN 105 int main() { int t; scanf("%d", &t); while (t--) { int r, c; scanf("%d %d", &r, &c); // 初始化地图和 DP 数组 int map[MAXN][MAXN]; int dp[MAXN][MAXN]; for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { scanf("%d", &map[i][j]); } } // 填充边界条件 dp[0][0] = map[0][0]; // 初始点 for (int i = 1; i < r; ++i) { // 左边界的初始化 dp[i][0] = dp[i - 1][0] + map[i][0]; } for (int j = 1; j < c; ++j) { // 上边界的初始化 dp[0][j] = dp[0][j - 1] + map[0][j]; } // 动态规划填表 for (int i = 1; i < r; ++i) { for (int j = 1; j < c; ++j) { dp[i][j] = ((dp[i - 1][j] > dp[i][j - 1]) ? dp[i - 1][j] : dp[i][j - 1]) + map[i][j]; } } printf("%d\n", dp[r - 1][c - 1]); // 输出最终结果 } return 0; } ``` 此程序实现了多组测试数据的支持,按照输入格式读入每一组的数据并计算出对应的结果[^4]。 ### 注意事项 上述代码假设所有输入均合法,即满足给定约束条件下的矩阵大小与数值范围。实际应用中可能还需要加入额外错误处理逻辑来应对非法输入情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值