【2018蓝桥省赛A组C/C++】倍数问题(dp+滚动数组)
【题目描述】
众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。
【输入格式】
从标准输入读入数据。
第一行包括 2 个正整数 n, K。
第二行 n 个正整数,代表给定的 n 个数。
【输出格式】
输出到标准输出。
输出一行一个整数代表所求的和。
【样例入】
4 3
1 2 3 4
【样例输出】
9
【样例解释】
选择2、3、4。
【数据约定】
对于 30% 的数据,n <= 100。
对于 60% 的数据,n <= 1000。
对于另外 20% 的数据,K <= 10。
对于 100% 的数据,1 <= n <= 10^5, 1 <= K <= 10^3,给定的 n 个数均不超过 10^8。
解题思路:
暴力O(n^3),只能拿一部分的分
dp:一个状态是合法的,它肯定是由另一个合法状态转化过来的
决策过程和背包问题(n件物品,w[i]和v[i],选择w[i]之和不超过M,且v[i]之和最大)类似,但有些需要注意的点
将v[i]%k作为w[i],(a+b+c)%k==0等价于(a%k+b%k+c%k)%k==0
状态转移方程:
dp[j+1][(t+w[i])%k]=max(dp[j][t]+v[i],dp[j+1][(t+w[i])%k]) 选第i个和不选第i个 (j==0&&t==0)||dp[j][t]
注意:j的遍历从2~0,且放在t循环的外面一层!!
ac代码:
#include <iostream>
#include <cmath>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#define maxn 100005
using namespace std;
int n,k;
int dp[5][1005]={0},w[maxn],v[maxn];
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d %d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&v[i]);w[i]=v[i]%k;}for(int i=1;i<=n;i++){for(int j=2;j>=0;j--){for(int t=k-1;t>=0;t--){if((j==0&&t==0)||dp[j][t])//选了0个和模k为0 or 已经选好了j个和模k为t,更新选j+1个时dp值dp[j+1][(t+w[i])%k]=max(dp[j][t]+v[i],dp[j+1][(t+w[i])%k]);//选v[i]和不选v[i]}}}cout<<dp[3][0]<<endl;return 0;
}
测试样例:
11 3
1 3 6 2 5 7 4 49 21 43 21
输出:99
【2018蓝桥省赛A组C/C++】倍数问题(dp+滚动数组)相关推荐
- 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组
在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 ...
- 【NOIP2015提高组】子串 区间DP+滚动数组优化
题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...
- [蓝桥杯]2016蓝桥省赛B组题目及详解
/*----------------------------------------------------------- [结果填空题]T1 (分值:3) 题目:煤球数目有一堆煤球,堆成三角棱锥形. ...
- 2018蓝桥模拟赛(一) 数独(dfs)
题目描述 蒜头君今天突然开始还念童年了,想回忆回忆童年.他记得自己小时候,有一个很火的游戏叫做数独.便开始来了一局紧张而又刺激的高阶数独.蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出 ...
- 2018蓝桥杯C++A组:三角形面积(海伦公式;向量的叉积)
一.题目:三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为: (2.3,2.5) (6.4,3.1) (5.1,7.2) 求该三角形的面积. 提交小数形式表示浮点数,精确到小数点后三位. 分析 ...
- 2018蓝桥模拟赛 天上的星星
在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星. 蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象.天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度. 现在,蒜头君问自己 ...
- 19蓝桥国赛B组C/C++ I第八大奇迹
题意: 有一条河,沿河的一侧生活着一个部落.这个一字型的部落有n个据点,从左至右依次编号1~n. 部落的人们有时会在某个据点建立建筑,每个建筑都有各自的价值.一开始,每个据点的都没有建筑,价值都是0. ...
- 2018蓝桥杯C++A组——星期一
目录 问题描述 题目解析 C++代码 正确答案 问题描述 整个20世纪(1901年1月1日至2000年12月31日之间),一共有多少个星期一? 注意:需要提交的只是一个整数,不要填写任何多余的内容或说 ...
- YbtOJ#20067-[NOIP2020模拟赛B组Day5]糖果分配【dp】
正题 题目链接:http://noip.ybtoj.com.cn/contest/102/problem/1 题目大意 nnn个xix_ixi在[li,ri][l_i,r_i][li,ri]中随 ...
- YbtOJ#20065-[NOIP2020模拟赛B组Day4]模拟比赛【dp】
正题 题目链接:http://noip.ybtoj.com.cn/contest/90/problem/3 解题思路 有nnn道题,mmm个人.一些题目是让某些人一定得分,一些题目是让某些人可以能得分 ...
最新文章
- 第3关:单链表循环队列
- 从FTP建立连接模式想到的TCP SYNFlood防御
- 作业——Windows核心编程学习手札系列之五
- SpringBoot基础重难点
- TCP协议属性设置之SO_LINGER属性
- pandas中inplace_pandas回顾小结(二)
- 手机网页播放器php,html5手机移动端视频播放代码插件
- CSP-J NOIP NOI数学与动态规划
- PHP超级全局变量总结
- 云计算学习教程,Python自动化运维开发实战
- Python核心编程学习日记之模块
- SFB 项目经验-15-配置会议邀请中企业信息
- c语言函数与宏定义的应用,C语言第3次实_函数与宏定义的应用.doc
- zmap扫描mysql_zmap快速扫描
- laravel使用dompdf总结
- 小码哥C++_面向对象
- 墙裂推荐5款做微商必备的软件
- 计算机应用基础图文混合排版,《Word 2010图文混合排版》教学设计与课后反思
- VisualStudio/VS在一个项目中添加多个c++文件
- 2023校招荣耀笔试
热门文章
- 我的博客也是男的(还好)
- 【算法】排序_选择排序及其优化
- 常用类字符串详解大全String
- python包管理工具pip_pip_python包管理工具(pip)下载 v9.0.1官方版 - 121下载站
- java程序设计颜志军_信息管理系统设计方案.doc
- 【转】C# SqlServer操作辅助类(SqlServerHelper.cs)
- CSS兼容IE6,IE7和FF的总结
- 推荐一个插件: The Great Suspender,大大减少chrome浏览器内存占用量
- 如何在阿里云里申请并使用免费https证书SSL、nginx下配置https证书
- 【译】2018 年前端开发回顾