【NHOI2018】扑克游戏
2024-08-27 13:19:54
【问题描述】
有一种别样“小猫钓鱼”扑克游戏。有 N 张牌,每张牌都有一个花色和点数。游戏的规则:扑克接龙时,若前面有同样花色的牌,你可以将这两张牌连同之间的牌都取走,得到的分值为取走牌点数之和。这里说的是可以,不是必须。给定扑克接龙的顺序,求最多的得分。
【输入格式】
第一行一个整数 N。
第二行 N 个整数,依次表示 1~N 张牌的花色。
第三行 N 个整数,依次表示 1~N 张牌的点数。
【输出格式】
一个整数,为游戏可以得到最大得分。
【输入样例】
7
1 2 1 2 3 2 3
1 4 3 4 3 4 5
【输出样例】
23
数据范围:1<=n<=3000
【解题思路】
简单的DP+利用前缀和求出数据中某一段的和。
【参考程序】
#include<iostream>
#include<cstdio>
using namespace std;
int n,c[3001],f[3001],dp[3001];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&c[i]);
for (int i=1;i<=n;i++)
{
scanf("%d",&f[i]);
f[i]=f[i-1]+f[i];
}
for (int i=1;i<=n;i++)
{
dp[i]=dp[i-1];
for (int j=1;j<i;j++)
if (c[i]==c[j])
dp[i]=max(dp[i],dp[j-1]+f[i]-f[j-1]);
}
cout<<dp[n];
return 0;
}
最新文章
- Spring Bean后处理器以及容器后处理器【转】
- WLAN拓扑介绍-07
- poj 3233 矩阵快速幂+YY
- 应用程序如何找到DLL文件?
- Android AndroidManifest学习笔记
- SSIS结合BCP及SQL Server作业实现定时将数据导出打包实现数据同步
- Spring与Ibatis整合入门
- html5标签placeholder使用
- Swift UI
- uva 10401 Injured Queen Problem(dp)
- #, about:blank,javascript:路径比较
- swoole使用 常用案例
- python 面向对象进阶之元类metaclass
- 【DWM1000】 code 解密2一 工程初始化代码分析
- 如何使用PowerDesigner设计数据库关系模式
- RocEDU.课程设计2018 第二周进展 博客补交
- 得到ImageView中drawable显示的区域的计算方法
- h5预加载代码
- Jackson JSON Processor
- 北京Uber优步司机奖励政策(4月17日)