题目链接:http://hihocoder.com/contest/hiho139/problem/1

描述

小Ho很喜欢在课间去小卖部买零食。然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称。第一次去一教小卖部买零食的时候,小Ho由于不懂事买了好一大堆东西,被小卖部姐姐给了一个“冷若冰霜”的眼神,食欲都下降了很多。

从那以后,小Ho就学乖了,去小卖部买东西只敢同时买3包以内的零食,并且价格加起来必须是5的整数倍,方便小卖部姐姐算价格。

但是小Ho不擅长计算,所以他把小卖部里所有零食的价格以及他对这个零食的渴望度都告诉了你,希望你能够帮他计算出在不惹恼小卖部姐姐的前提下,能够买到零食的渴望度之和最高是多少?

输入

每个输入文件包含多组测试数据,在每个输入文件的第一行为一个整数Q,表示测试数据的组数。

每组测试数据的第一行为一个正整数N,表示小卖部中零食的数量。

接下来的N行,每行为一个正实数A和一个正整数B,表示这种零食的价格和小Ho对其的渴望度。

一种零食仅有一包。

对于100%的数据,满足1 <= Q <= 10,1<=N<=50,0<A<=10,1<=B<=100。

对于100%的数据,满足A的小数部分仅可能为0.5或0。

输出

对于每组测试数据,输出一个整数Ans,表示小Ho可以获得最大的渴望度之和。

样例输入

1
4
0.5 6
4.5 7
5.0 4
2.0 9
样例输出
17

思路:很裸的背包,不过存在两个条件约束。

可以将 渴望度 视为 价值 ,将 重量 视为 1。此时就是在质量不超过3且价格和能整除5的情况下求最大价值。

此时可以设计一个二维DP,类似于数位DP的思路,将余数作为第二维。

此时 dp[i][j] 表示 i个物品对5取余余数为j时的最大价值。

则 状态转移方程为:

设第i个物品的价格对5取余的余数 为 mod[i] 。

dp[i][j] = max (dp[i][j] , dp[i-1][k] + v[i])      (j = (k + mod[i]) % 5  , k = 0 ~ 9)

然后三层循环即可。

#include <bits/stdc++.h>using namespace std;typedef long long ll;
typedef unsigned long long ull;#define rep(i, a, b)              for(int i(a); i <= (b); ++i)
#define dec(i, a, b)              for(int i(a); i >= (b); --i)
#define MP      make_pairconst ll  INF   =    0x3f3f3f;
const int N     =    100000      +       10;
const int M     =    10000       +       10;
const int Q     =    1000        +       10;
const int A     =    100         +       10;int price[A],v[A],dp[A][A];int main(){int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);rep(i,1,n){double p;scanf("%lf%d",&p,&v[i]);price[i] = (p*2);}memset(dp,-INF,sizeof(dp));dp[0][0] = 0;rep(i,1,n){int mod = price[i] % 10;dec(j,3,1){rep(k,0,9){int now = (k+mod) % 10;dp[j][now] = max(dp[j][now] , dp[j-1][k] + v[i]);}}}int ans = 0;rep(i,0,3)     ans = max(ans,dp[i][0]);printf("%d\n",ans);}return 0;
}

hiho一下 第139周 《买零食》 多维01背包相关推荐

  1. hiho一下 第139周 买零食

    买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称.第一次去 ...

  2. hiho一下 第139周 买零食 动态规划

    原题:http://hihocoder.com/contest/hiho139/problem/1 看了下,通过率还挺高的.主要是数据量不大100,套三个循环纯暴力理论上应该都可以过的,不过时间复杂度 ...

  3. hihoCoder--139周 买零食

    题目1 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著 ...

  4. 买菜用了01 背包 wwwwwwwwwwwwww

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  5. hiho #1272 买零食 [Offer收割]编程练习赛2

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

  6. 关于小学和哥哥买零食的琐碎回忆

    人越长大,总会去回忆小时候的事情,我就是这样一个喜欢不断后悔.遗憾.回忆.怀念的人 对于零食,我和哥哥可谓是爱之入骨.也许是因为爸爸也是个吃货,所以我们几个小孩都特别喜欢吃零食,现在也不例外. 如今能 ...

  7. hihoCoder 买零食

    时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称.第一次去一教小卖 ...

  8. hihocoder买零食

    买零食 Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%lld & %llu Submit Status Pr ...

  9. [hihoCoder] 买零食

    http://hihocoder.com/contest/hiho139/problem/1?sid=992251 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一 ...

最新文章

  1. [InnoDB系列] - InnoDB独立/共享表空间的转换
  2. linux samba 空目录,linux Samba搭建
  3. DataGridView的DataGridViewComboBoxColumn列点击一次,自动处于编辑状态
  4. git config设置用户名_一个神奇的工具,实现多人协作,git常用命令详解
  5. 手机端适应_不轻易透露的超强技巧!详解iVX中怎样做设备自适应
  6. [渝粤教育] 中国地质大学 C语言程序设计(新) 复习题
  7. 高压断路器故障诊断的相关方法
  8. python序列是几维_从一个1维的位数组获得一个特定的2维的1序列数组[Python] - python...
  9. 上海市名校一年级数学考试附加题,难住学霸
  10. “12306”的架构到底有多6?
  11. redis 值字符串前面部分乱码_redis key乱码
  12. JavaScript的三大高阶函数
  13. Nodejs 获取本机IP地址
  14. 自激多谐振荡电路实验总结,小白电路测试
  15. CSS子元素选择父元素
  16. Scratch软件编程等级考试二级——20191221
  17. ElementUI tree超出显示省略号
  18. 解决数组转对象后,key自动排序
  19. 《uni-app》一个非canvas的飞机对战小游戏实现-碰撞检测的实现
  20. 看了下面的关于大亚湾核电站的一些报道,我终于明白为什么老弟在惠阳买的房子会这么便宜了!

热门文章

  1. 小米怎么快速回到顶部_[玩机教程:App推荐篇 01] | 小米视频 极速版(MiVideo-Lite)...
  2. 检索有关计算机系统功能设计方面的文献,基于词汇功能识别的科研文献分析系统设计与实现-武汉大学信息检索.PDF...
  3. 高中计算机考试操作题ftp,计算机考试实操题-高中课件精选.doc
  4. 机器学习和深度学习综述
  5. 鸡尾酒排序和冒泡优化
  6. UE4 3ds Max 模型多维子材质
  7. python calu_使用Python检查变量是否介于两个值之间
  8. 22岁B站主播之死:有很多人,过着我们想象不到的人生
  9. 没有今天的百度,难道它真的天亮了?
  10. Kubernetes(三):k8s集群部署之kubeadm