ABC E WA*2求调
  • 板块学术版
  • 楼主wangyinghao
  • 当前回复12
  • 已保存回复12
  • 发布时间2025/7/19 22:47
  • 上次更新2025/7/20 14:52:14
查看原帖
ABC E WA*2求调
453759
wangyinghao楼主2025/7/19 22:47
#include<iostream>
#include<vector> 
using namespace std;
#define int long long
vector<int> a[200005],dp[200005],dp2[200005];
int p[400005],s[400005];

signed main(){
	int h,w;
	cin>>h>>w;
	for(int i=0;i<=w;i++){
		a[0].push_back(0);
	}
	for(int i=1;i<=h;i++){
		a[i].push_back(0);
		for(int j=1;j<=w;j++){
			int x;
			cin>>x;
			a[i].push_back(x);
		}
	}
	for(int i=1;i<=h+w-1;i++){
		cin>>p[i];
		s[i]=s[i-1]+p[i];
	}
	int cnt=0;
	for(int i=0;i<=w;i++){
		dp[0].push_back(0);
		dp2[0].push_back(1e18);
	}
	for(int i=1;i<=h;i++){
		dp[i].push_back(0);
		dp2[i].push_back(1e18);
		for(int j=1;j<=w;j++){
			dp[i].push_back(max(dp[i-1][j],dp[i][j-1])+a[i][j]);
			if(i==1 && j==1) dp2[i].push_back(0);
			else dp2[i].push_back(min(dp2[i-1][j],dp2[i][j-1]));
			if(s[i+j-1]>dp[i][j]+dp2[i][j]) dp2[i][j]+=s[i+j-1]-dp[i][j]-dp2[i][j];
		}
	}
	cout<<dp2[h][w];
	return 0;
}

其中 dpi,jdp_{i,j} 表示走到 (i,j)(i,j) 时获得的最大金币数,dp2i,jdp2_{i,j} 表示走到 (i,j)(i,j) 需要的最小初始钱数

2025/7/19 22:47
加载中...