思路(dp):
设f[i][j][k]表示三堆书分别剩下i、j、k本时(已经拿过的不计),能够得到的最大值,最后输出f[a][b][c]。dp方程:f[i][j][k] = max (f[i-1][j][k]+x[i]*s, max (f[i][j-1][k]+y[j]*s, f[i][j][k-1]+z[k]*s)) (s是当前要乘上的体力值)
AC:
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=110;
int x[N],y[N],z[N],f[N][N][N];
int main()
{
int a,b,c;
cin >> a >> b >> c;
int sum=a+b+c;
for(int i=1;i<=a;i++)
cin >> x[i];
for(int j=1;j<=b;j++)
cin >> y[j];
for(int k=1;k<=c;k++)
cin >> z[k];
for(int i=0;i<=a;i++)
{
for(int j=0;j<=b;j++)
{
for(int k=0;k<&