ABC415 E WA*15 求调
  • 板块学术版
  • 楼主DreamSpaceDream
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/7/20 09:42
  • 上次更新2025/7/20 16:40:39
查看原帖
ABC415 E WA*15 求调
229474
DreamSpaceDream楼主2025/7/20 09:42
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5,INF=1e18;
ll n,m;
ll a[N+1];
ll f[N+1];
#define ID(x,y) (((x)-1)*m+(y))
ll p[N>>1]; 
inline ll Read(){
    char Char;
    ll Number=0,Sign=1;
    Char=getchar();
    while(!('0'<=Char&&Char<='9')){  Sign=(Char=='-') ? -1:1;  Char=getchar();}
    while(  '0'<=Char&&Char<='9' ){Number=Number*10+(Char-'0');Char=getchar();}
    return Number*Sign;
}
int main(){
    ll i,j,k;
    freopen("E.in","r",stdin);
    freopen("E.out","w",stdout);
    n=Read();m=Read();
    for(i=1,k=1;i<=n;i++)
        for(j=1;j<=m;j++,k++)
            a[k]=Read();
    for(i=1;i<=n+m-1;i++)p[i]=Read();
    for(i=1,k=1;i<=n;i++)
        for(j=1;j<=m;j++,k++)
            a[k]=p[i+j-1]-a[k],f[k]=INF;
    f[n*m]=a[n*m];
    for(i=n,k=n*m;i>=1;i--)
        for(j=m;j>=1;j--,k--){
            if(i<n)f[k]=min(f[k],f[ID(i+1,j)]+a[k]);
            if(j<m)f[k]=min(f[k],f[ID(i,j+1)]+a[k]);
            f[k]=max(0ll,f[k]);
        }
    printf("%lld\n",f[1]);
    return 0;
}

f[ID(i,j)]:从(i,j)出发到(n,m),至少要带多少硬币

2025/7/20 09:42
加载中...