P7381 [COCI2018-2019#6] Sličice

传送门:P7381 [COCI2018-2019#6] Sličice

其实是一道类似多重背包的题目,定义 dpij{dp_i}_ j 表示代表前 ii 个球队共收集 jj 张时最大分数。可以求出状态转移方程 dpij=max{dpij,dpi1jg+bpi+g}{dp_i}_ j = \max \{ {{dp_i}_ j, {dp_{i - 1}}_ {j - g} + b_{{p_i}+g}} \}

代码:

#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;
}
posted @   HappyBobb  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示