诡异的问题
查看原帖
诡异的问题
984679
illidan_楼主2023/11/23 11:33
#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;
}

问题写在代码的注释里了,为啥逻辑是一样的用数组写就只能过一两个点,好诡异啊,是反复调用数组的值出错了吗?小白求解

2023/11/23 11:33
加载中...