洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜
阅读原文时间:2023年07月09日阅读:1

P2392 kkksc03考前临时抱佛脚 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include
#include
#include

using namespace std;

int a[4][25], dp[2000];
int s[4];
int sum[4];

int main()
{
cin >> s[0] >> s[1] >> s[2] >> s[3];

for(int i = 0; i < 4; ++ i )  
    for(int j = 0; j < s\[i\]; ++ j)  
        cin >> a\[i\]\[j\], sum\[i\] += a\[i\]\[j\];

int res = 0;  
for(int i = 0; i < 4; ++ i)  
{  
    memset(dp, 0, sizeof dp);  
    int ans = 0;  
    for(int k = 0; k < s\[i\]; ++ k)  
        for(int j = sum\[i\]/2; j >= a\[i\]\[k\]; -- j)  
        {  
            dp\[j\] = max(dp\[j\], dp\[j-a\[i\]\[k\]\] + a\[i\]\[k\]);  
            ans = max(ans, dp\[j\]);  
        }  
        res += sum\[i\] - ans;  
}

cout << res << endl;  
return 0;  

}

#include

using namespace std;

int a[4][25];
int s[4];
bool st[30];
int l = 0, r = 0, res = 0, num = 999999999;

void dfs(int i, int j)
{
if(j < 0)
{
num = min(num, max(l, r));
return;
}
l += a[i][j];
dfs(i, j-1);
l -= a[i][j];
r += a[i][j];
dfs(i, j-1);
r -= a[i][j];

}

int main()
{
cin >> s[0] >> s[1] >> s[2] >> s[3];

for(int i = 0; i < 4; ++ i )  
    for(int j = 0; j < s\[i\]; ++ j)  
        cin >> a\[i\]\[j\];

for(int i = 0; i < 4; ++ i)  
{  
    dfs(i, s\[i\]-1);  
    res+= num;  
    l = 0, r = 0, num = 999999999;  
}

cout << res << endl;  
return 0;  

}