ABC E 求条
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/19 21:58
  • 上次更新2025/7/20 13:46:30
查看原帖
ABC E 求条
1333279
封禁用户楼主2025/7/19 21:58
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int h,w;cin>>h>>w;
    vector<vector<long>>a(h,vector<long>(w));
    for(int i=0;i<h;i++)for(int j=0;j<w;j++)cin>>a[i][j];
    vector<long>p(h+w-1);for(int k=0;k<h+w-1;k++)cin>>p[k];
    long l=0,r=1e15,m,x=-1;
    while(l<=r){
        m=(l+r)/2;
        vector<vector<long>>d(h,vector<long>(w,-1));
        d[0][0]=m+a[0][0];
        for(int k=1;k<h+w-1;k++){
            for(int i=0;i<h;i++){
                int j=k-1-i;
                if(j<0||j>=w||d[i][j]<p[k-1])continue;
                long c=d[i][j]-p[k-1];
                if(i+1<h)d[i+1][j]=max(d[i+1][j],c+a[i+1][j]);
                if(j+1<w)d[i][j+1]=max(d[i][j+1],c+a[i][j+1]);
            }
        }
        if(d[h-1][w-1]>=p.back())x=m,r=m-1;
        else l=m+1;
    }
    cout<<x;
}

rt

2025/7/19 21:58
加载中...