acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
登录
注册
题目详情提交记录(0)
  • 题解

    #include <iostream> #include <cstdio> #include <memory.h> #define int long long using namespace std; int a[2005][2005]; int dp1[2005][2005], dp2[2005][2005]; int x[4000005], y[4000005]; int n, m, k, p; signed main(){ ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> m >> k >> p; for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ cin >> a[i][j]; } } for(int i = 1; i <= k; i++){ cin >> x[i] >> y[i]; } memset(dp1, 63, sizeof(dp1)); memset(dp2, 63, sizeof(dp2)); dp1[1][1] = a[1][1]; dp2[n][m] = a[n][m]; for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(i == 1 && j == 1) continue; dp1[i][j] = min(dp1[i - 1][j], dp1[i][j - 1]) + a[i][j]; } } for(int i = n; i; i--){ for(int j = m; j; j--){ if(i == n && j == m) continue; dp2[i][j] = min(dp2[i + 1][j], dp2[i][j + 1]) + a[i][j]; } } if(!k || !p){ cout << dp1[n][m]; return 0; } int mn1 = 0x3f3f3f3f3f3f3f3fll; int mn2 = 0x3f3f3f3f3f3f3f3fll; for(int i = 1; i <= k; i++){ mn1 = min(mn1, dp1[x[i]][y[i]]); mn2 = min(mn2, dp2[x[i]][y[i]]); } cout << min(dp1[n][m], mn1 + mn2); }

    userId_undefined

    威风的龙

    出道萌新分支·分支解题者循环·循环打卡人倔强青铜字符串·魔法使I/O·IO入门者
    6阅读
    1回复
    1点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页