这个DP题不太懂,有大佬可以解释一下吗?
查看原帖
这个DP题不太懂,有大佬可以解释一下吗?
959578
MoYi__666楼主2023/10/6 17:13

这个DP题不太懂,有大佬可以解释一下吗?

知道是个01背包DP,但是转移方程和下面的过程不太懂(本人是新学DP的蒟蒻,望大佬能详细解答,谢谢)

#include<bits/stdc++.h>

using namespace std;

const int maxn = 114514;



int n,m,num;

int s[4];
int a[maxn],dp[maxn];


signed main()
{
    ios::sync_with_stdio(0);
    
    for(int i = 1;i <= 4; i ++)cin>>s[i];
    for(int i = 1;i <= 4 ;i ++)
    {
        num = 0;
        
        for(int j = 1;j <= s[i] ;j ++)
        {
            cin>>a[j];
            
            num += a[j];
        }
        
        for(int j = 1;j <= s[i];j ++)
        {
            for(int k = num / 2;k >= a[j] ;k --)
            {
                dp[k] = max(dp[k],dp[k - a[j]] + a[j]);
            }
        }
        m += num - dp[num /2];
        for(int j = 1;j <= num/2; j ++)dp[j] = 0;
    }
    cout<<m;
    
}

顺便问一下,CSPJ到了,应该学点啥呢?

感谢感谢!!!!

2023/10/6 17:13
加载中...