题目

原题链接


问题描述

化为背包问题来理解,就是说有nnn个物品,每个物品的体积为aia_iai​,价值为bib_ibi​,此时的背包的容积没有限制,但要求放入背包的物品的总体积要为kkk的倍数时价值才有意义。
数据范围:
1≤n,k≤10001\leq n,k \leq 10001≤n,k≤1000
1≤ai,bi≤1091\leq a_i,b_i \leq 10^91≤ai​,bi​≤109


分析

总体积为kkk的倍数,也就是对kkk取模的结果为000,所以我们以dp[i][j]dp[i][j]dp[i][j]作为状态,表示处理完第iii个物品后,总体积对kkk取模为jjj的最大价值。
状态转移方程为:dp[i][j]=max(dp[i−1][j],dp[i−1][(j+k−a[i])%k]+b[i])dp[i][j]=max(dp[i-1][j],dp[i-1][(j+k-a[i])\%k]+b[i])dp[i][j]=max(dp[i−1][j],dp[i−1][(j+k−a[i])%k]+b[i])
需要注意的是,如果不提前处理a[i]a[i]a[i],(j+k−a[i])(j+k-a[i])(j+k−a[i])所得结果会是一个负值(带负数的取模运算),取模结果也可能会是负数,也就会数组越界,导致结果出错,所以提前处理a[i]a[i]a[i]。
其次,关于边界的设置,dp[0][0]=0dp[0][0]=0dp[0][0]=0是肯定的,但对于dp[i][0](0<i<k)dp[i][0](0<i<k)dp[i][0](0<i<k)的情况,如果同样置为000,在后面的讨论中将会出现问题。
假设第一个物品的体积为666,价值为101010,k=10k=10k=10,在讨论中会出现dp[1][5]=10dp[1][5]=10dp[1][5]=10的情况,因为我们预设了dp[0][9]dp[0][9]dp[0][9]是有意义的,但实际上这种情况是没有意义无需参与讨论的。

我们可以将无意义情况置为一个极小值,也可以另外开一个数组来记录它们的情况,后续更新它们的状态。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
ll n,k,dp[N][N],a[N],b[N];
int main(){cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i]>>b[i];a[i]%=k;}for(int j=1;j<=k;j++)dp[0][j]=-1e16;for(int i=1;i<=n;i++){for(int j=0;j<k;j++)dp[i][j]=max(dp[i-1][j],dp[i-1][(j+k-a[i])%k]+b[i]);}cout<<(dp[n][0]?dp[n][0]:-1)<<endl;
}

爆炸的符卡洋洋洒洒(01背包变形)相关推荐

  1. 爆炸的符卡洋洋洒洒题解报告

    爆炸的符卡洋洋洒洒题解报告 标签:动态规划 题目链接 来源:牛客网 解题思路: 显而易见的背包问题 但再观察a,b的数据范围,开不了那么大的dp数组 这就启发我们去优化,由于题目要求魔力总耗的是k的倍 ...

  2. 爆炸的符卡洋洋洒洒(dp)

    题目链接:I-爆炸的符卡洋洋洒洒_2022牛客寒假算法基础集训营4 (nowcoder.com) 题目:小红正在研究如何把符卡组合出尽可能大威力的组合魔法.小红共有 n 种符卡可以选择,每种符卡最多只 ...

  3. 爆炸的符卡洋洋洒洒(01背包)

    题目链接 https://ac.nowcoder.com/acm/contest/23479/I 题面 思路 我们从这n种符卡中选择一些卡牌,然后每张卡牌花费aia_iai​的魔力,达到bib_ibi ...

  4. 爆炸的符卡洋洋洒洒<每日一题>(01背包变种)

    题目: 题目链接:登录-专业IT笔试面试备考平台_牛客网 思路: 该题为01背包的变种问题 我们先来复习一下普通的01背包 dp[i][j]数组的含义: i代表了取前i个物品 j代表了背包的空间 数组 ...

  5. I 爆炸的符卡洋洋洒洒(牛客)01背包

    输入 2 2 1 2 2 1 输出 1 说明 选择第二个符卡,消耗为2,是2的倍数.威力是1. 输入 2 2 1 2 2 1 输出 1 说明 选择第二个符卡,消耗为2,是2的倍数.威力是1. 输入 3 ...

  6. 牛客寒假训练营4-爆炸的符卡洋洋洒洒 (dp变形)

    题意: 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 小红正在研究如何把符卡组合出尽可能大威力的组合魔法. 小红共有 n 种符卡可以选择,每种符卡最多只能选择一次,每个符卡的魔力消耗为 ...

  7. 牛客寒假算法基础集训营4-I.爆炸的符卡洋洋洒洒

    标签:动态规划 思路 本题比较容易看出来是01背包的变形 注意到a的数据范围很大,dp数组是肯定存不下的,但是k的范围很小,而本题中要求魔力消耗总和是k的倍数,这就意味着如果a[i]%k==t,那么a ...

  8. I—爆炸的符卡洋洋洒洒(不模不行的DP)

    题目如下: 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 小红正在研究如何把符卡组合出尽可能大威力的组合魔法. 小红共有 n 种符卡可以选择,每种符卡最多只能选择一次,每个符卡的魔力消耗 ...

  9. 爆炸的符卡洋洋洒洒题解

    题目描述 小红正在研究如何把符卡组合出尽可能大威力的组合魔法. 小红共有 n种符卡可以选择,每种符卡最多只能选择一次,每个符卡的魔力消耗为 ai​,威力为 bi​. 如果将多个符卡进行组合,则可以发动 ...

最新文章

  1. MATLAB plot画图后横轴去除空白
  2. 008_表内容的插入删除修改
  3. 封装运动框架多个属性
  4. C语言结构体值复制与字符数组值复制的比较测试
  5. python-进程、线程
  6. Vue 教程第九篇—— 动画和过度效果
  7. qt中sendevent_Qt中postEvent和sendEvent函数
  8. [html] 如何让table的边框双线变单线?
  9. BZOJ 3329: Xorequ(数位dp+递推)
  10. python 哪些项目_一份2018年Python开源项目Top100清单!
  11. rms归一化_将FFT频谱幅度归一化为0dB
  12. Windows镜像文件下载速度太慢?告诉你个小妙招
  13. 快速做出3D人物动画
  14. 惠普打印机故障代码_惠普打印机出现故障怎么办
  15. 禅道服务器修改ip,访问禅道服务器的ip地址
  16. 分析计算机网络的功能,分析计算机网络管理系统的功能及实现
  17. iphone计算机照片要求,如何将IPhone照片导入电脑
  18. python医药数据分析_Python数据分析案例-药品数据分析案例
  19. 微博情感分析的表情符号平滑语言模型(A11, AAAI2012)
  20. 学人工智能需要什么配置的电脑?AI电脑配置需求

热门文章

  1. 大数据平台Ambari2.7.4+HDP3.1.4安装(超详细教程)
  2. 如何实现同一网络的计算机共享文件,同一个局域网内如何共享文件
  3. 国科大移动互联网技术考试
  4. 现在完成时的被动语态和动词的过去分词做形容词
  5. 全平台福利集合大放送!24h后立刻删!冲!
  6. 利用新浪微博来控制电脑
  7. Dijkstra——去北京看奥运
  8. 欧文分校计算机新sat多少分录取,加州大学欧文分校留学托福成绩要求95分 SAT1800分...
  9. SwitchyOmega插件安装
  10. Multi-Agent Graph Convolutional Reinforcement Learning for Dynamic Electric Vehicle Charging Pricing