开始题目看错了,然后没往分组上想。
这是一个分组背包,dp[i][j][k],三维分别是第i类卡牌,有j个倍率,当前拿了k个。
所以我没想到的就是这个背包没有直接得出答案,而是处理出所有同倍率中的最大本金和。

#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node{string name;string color;int power;
};
string color;
string name[6];
node card[200000];
int dp[200000][20][6];
unordered_map<string,int> mp;
vector<int> c[200000];
signed main(){int T;cin >> T;for (int j = 0; j <= 15; ++j) {for (int k = 0; k <= 5; ++k) {dp[0][j][k] = -0x3f3f3f3f3f3f;}}while (T--){mp.clear();int n;cin >> n;for (int i = 1; i <= n; ++i) {cin >> card[i].name >> card[i].color >> card[i].power;}for (int i = 1; i <= 5; ++i) cin >> name[i];cin >> color;int id = 0;for (int l = 1; l <= n; ++l) {if (!mp[card[l].name]){++id;c[id].clear();mp[card[l].name] = id;}c[mp[card[l].name]].push_back(l);}dp[0][0][0] = 0;for (int i = 1; i <= id; ++i) {for (int j = 0; j <= 15; ++j)for (int k = 0; k <= 5; ++k)dp[i][j][k] = dp[i - 1][j][k];for (int v : c[i]) {int w = 0;for (int l = 1; l <= 5; ++l) {if (name[l] == card[v].name)w ++;}if (card[v].color == color) w+=2;for (int k = 1; k <= 5; ++k)for (int j = w; j <= 15; ++j)dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j - w][k - 1] + card[v].power);}}int ans= 0;for (int m = 0; m <= 15; ++m) {if(dp[id][m][5] > 0 ) ans = max(ans,dp[id][m][5]+ dp[id][m][5] * m/10  );}cout << ans << endl;}
}

Girls Band Party - 分组背包相关推荐

  1. 分组背包----HDU1712 ACboy needs your help

    很简单的一道分组背包入门问题.不多解释了. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...

  2. [bzoj1025][SCOI2009]游戏 (分组背包)

    Description windy学会了一种游戏.对于1到N这N个数字,都有唯一 且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,--,N写一排在纸上.然后再在这一排下面写上它们 ...

  3. HDU 3033 I love sneakers! (分组背包变形)

    题目大意:xx去买鞋,有k种牌子,然后给出n双鞋,每双鞋有它属于的牌子.价格.收藏价值.xx认为他不差钱,要求每种鞋子买一双.但实际上他只有m毛钱,问能否买到符合xx要求的鞋,能找到的话输出最大的收藏 ...

  4. hdu 1712(分组背包)

    题意:有N个课程,然后选择M天内学习的效益最大值,注意每个课程最多选取一次. 解题思路:裸的分组背包,把每门课程看做是每一组,每一组里面最多选择一个天数,典型的分组背包.详见背包九讲 #include ...

  5. hdu 3033(分组背包)

    题意:有S款运动鞋,一个n件,总钱数为m,求不超过总钱数且每款鞋子至少买一双的情况下,使价值最大.如果 有一款买不到,就输出"Impossible". 解题思路:分组背包,和背包九 ...

  6. zcmu2165(分组背包)

    2165: 黄金矿工 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 86  Solved: 41 [Submit][Status][Web Board ...

  7. 2019年湘潭大学程序设计竞赛(重现赛)补题:H.Chat(分组背包)

    链接:https://ac.nowcoder.com/acm/problem/25581 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. P1064 金明的预算方案(分组背包)

    https://www.luogu.org/problemnew/show/P1064 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈 ...

  9. 【题解】luogu P1757 通天之分组背包

    分组背包类型 总结: 1.先循环体积,再循环每组内的物品,保证每组物品内只选一次. 若调换位置,有可能每组内物品多选了. 2.num数组记录每组有多少个物品: belong数组记录每组物品的每一个物品 ...

最新文章

  1. Room Database完全使用手册
  2. Memcache的使用
  3. pandas之loc iloc ix
  4. 梯度下降法预测波士顿房价以及简单的模型评估
  5. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数 2...
  6. 关于feign开启hystrix导致用户鉴权失败
  7. Kubernetes 小白学习笔记(21)--kubernetes的运维-管理Lable
  8. 职场真正的潜规则,毕业生却一直不重视!还自以为是的认为这是优点!!HR直接会pass这一群人!!
  9. 【Reference Reading】一种基于双硼/Gd剂的治疗诊断学方法以提高硼中子捕获治疗肺癌的疗效
  10. [Error]compileSdkVersion is not specified. Please add it to build.gradle
  11. excel几个数相加等于某个数_『excel表如何从一列数据中筛选出合计等于某数的某些数?』...
  12. 笔记本键盘失灵怎么办? 笔记本电脑按键失灵的一般解决办法
  13. Android Facebook登陆获取 Key Hashes值
  14. mysql基础学习--day7
  15. 推荐上百本优质大数据书籍,附必读清单(大数据宝藏)
  16. fluent里常见基础问题(转)
  17. 思齐什么意思_思齐的寓意
  18. Scan的使用方式以及Spring redis的坑
  19. 说说table下面定位层级的问题
  20. 安卓开发为什么选择用Java语言

热门文章

  1. python-opencv第二期:imwrite函数详解
  2. vbscript运行环境linux,VBScript
  3. 【STM32】STM32单片机结构及部件原理
  4. 通过Redis限制API调用次数
  5. c# winform linkbutton 去除下划线
  6. Appium使用笔记整理及IOS的WDA工具的使用简介
  7. SN Write 使用说明
  8. Linux定时任务执行脚本无效
  9. 乐华娱乐申请注册王一博战队 “一波王炸”商标 相关域名情况如何
  10. excel减法函数_excel减法公式怎样设置