P7381 [COCI2018-2019#6] Sličice
传送门:P7381 [COCI2018-2019#6] Sličice
其实是一道类似多重背包的题目,定义 表示代表前 个球队共收集 张时最大分数。可以求出状态转移方程 。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
const int N = 505;
int p[N], B[N], dp[N][N]; // dp[i][j] 代表前 i 个球队共收集 j 张时最大分数
signed main()
{
int n, m, k;
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) cin >> p[i];
for (int i = 0; i <= m; i++) cin >> B[i];
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= k; j++)
{
for (int g = 0; p[i] + g <= m && g <= k && g <= j; g++) // 当前已选加上多选的小于等于 m
{
dp[i][j] = max(dp[i][j], dp[i - 1][j - g] + B[p[i] + g]);
}
}
}
int ans = 0;
for (int i = 0; i <= k; i++)
{
ans = max(ans, dp[n][i]);
}
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号