#include <bits/stdc++.h>
//#define int long long
#define id(i,j) (i-1)*m+j
#define endl '\n'
using namespace std;
const int N = 1e6+5;
int n,m,k,T,t1,t2;
int val[N],cost[N],dp[N],a[1002][1002],b[1002][1002];
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin>>n>>m>>t1>>t2;
int t = min(t1,t2-1);
for(int i =1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>a[i][j];
}
}
int num = 0;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
int cnt = 0;
int v = a[i][j]; //相当于用变量存储了数组里的值
cin>>b[i][j];
cnt = b[i][j]; //cnt和v一个道理,改成使用数组里的值就不过
if(a[i][j]==0||b[i][j] == 0) continue;
int cost_now = (i+j)*2;
for(int j = 1;j<=cnt;j*=2)
{
cost[++num] = cost_now*j;
val[num] = v * j; //能过
//val[num] = a[i][j] * j; 不能过
cnt -= j;
}
if(cnt>0)
{
cost[++num] = cost_now * cnt;
val[num] = v * cnt;
//val[num] = a[i][j] * cnt;
}
}
}
for(int i = 1;i<=num;i++)
{
for(int j = t;j>=cost[i];j--)
{
dp[j] = max(dp[j],dp[j-cost[i]]+val[i]);
}
}
cout<<dp[t];
return 0;
}
问题写在代码的注释里了,为啥逻辑是一样的用数组写就只能过一两个点,好诡异啊,是反复调用数组的值出错了吗?小白求解