90pts求调
  • 板块P2760 科技庄园
  • 楼主KAqvq
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/7/25 11:50
  • 上次更新2023/10/27 18:31:47
查看原帖
90pts求调
754495
KAqvq楼主2022/7/25 11:50
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=4e3+5,N=4e7+5;
int n,m,q,p,po,a[MAXN][MAXN],b[MAXN][MAXN],x,dp[N],w[N],v[N],num,cnt;
inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch<='0'||ch>'9'){
        if (ch=='-') w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
    return s*w;
}
signed main(){
	n=read(),m=read(),q=read(),p=read();
	po=min(q,p-1);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)	scanf("%lld",&b[i][j]);
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
		if(!a[i][j]||!b[i][j]) continue;
		cnt=2*(i+j);
		x=b[i][j];
		while(x--){
			w[++num]=cnt;
			v[num]=a[i][j];
		}
	}
	for(int i=1;i<=num;i++) for(int j=po;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
	printf("%lld",dp[po]);
	return 0;
}
2022/7/25 11:50
加载中...