"Doctor,你觉得问题在哪"
"就在这里"
不能摘得桃树没有意义,一次摘得消耗是一样得,而且把时间和体力的消耗是一样的,那么也不用开二维了,记得给他留一点体力就可以了
剩下的就是个多重背包
# include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int n,m,t,a;
int x;
int va[100001];
int p;
int v[100001];
int w[100001];
int pp;
int f[10000001];
int mm[10001][10010];
int num;
void chai(int x,int id,int dis){
for(int i=1;i<=x;i*=2){
v[++num]=id*i;
w[num]=dis*i;
x-=i;
}
v[++num]=id*x;
w[num]=dis*x;
}
int znx;
signed main(){
scanf("%lld%lld%lld%lld",&n,&m,&t,&a);
int lim=min(t,a-1);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
scanf("%d",&mm[i][j]);
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
scanf("%lld",&x);
if(x&&mm[i][j]){
chai(x,mm[i][j],(i+j)*2);
}
}
}
for(int i=1;i<=num;++i){
for(int j=lim;j>=w[i];--j){
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
for(int i=1;i<=lim;++i){
znx=max(znx,f[i]);
}
cout<<znx;
return 0;
}