简单DP (Preparing for Xtreme 12.0) | STL map使用
当水题遇上了map大坑
晚上写一个dp,弄了半天样例一直不过,对着队友的代码一行行看,发现跟自己逻辑完全一样啊。。。
然后就逐行输出比对,发现预处理出了问题,把map插入新值的地方改了下,果然就好了。。。
折腾半晚上,不吐不快。
以前使用STL的map时,一直把它当作一种高级数组,很少使用insert来插入键值对,都是直接用下标索引直接插入新值。而在map中查找key时,我也一般直接采取判断mp[key]是否为0。
而这题这样用也没多大问题,就怪我太作了,把tot默认设置为-1,方便++tot后从0开始计数。。。
但是插入跟第一个相同的key时,由于ID[key]==0,就把ID[key]的值更新了。。。
调试半天都没发现这样的bug啊T_T T_T T_T
直接上AC代码:
#include<iostream>
#include<vector>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<map>
using namespace std;
const int INF = 0x3f3f3f3f;
int b, tot;
map<string, int> ID;
struct book{
int id;
int cost;
}books[]; int dp[<<]; int main()
{
int cost;
while(cin>>cost) {
books[b].cost = cost; string line, book;
getline(cin, line);
stringstream ss(line);
while(ss>>book) {
// if(!ID.count(book)) ID.insert(make_pair(book, ++tot));
// if(ID.find(book)==ID.end()) ID.insert(make_pair(book, ++tot)); // map里没有键book,则插入
if(!ID[book]) ID[book] = ++tot;
books[b].id |= <<(ID[book]-);
}
b++;
} int S = <<tot;
dp[] = ;
for(int i=;i<S;i++) dp[i] = INF;
for(int i=;i<S;i++) {
for(int j=;j<b;j++) {
dp[i|books[j].id] = min(dp[i|books[j].id], dp[i]+books[j].cost);
}
}
cout<<dp[S-]<<endl;
return ;
}
最后关于map的使用,还是推荐注释部分的写法。
这篇博客讲了这两种插入的效率问题,我想区别不是太大,直接用ID[book]=++tot也是可以的。
在以后的使用中还是要尽量避免直接使用下标访问,应该如果你要访问的key不存在的话,会默认插入新的值,size也会增加。
map的查找操作使用总结如下
在map中,由key查找value时,首先要判断map中是否包含key。
如果不检查,直接返回map[key],可能会出现意想不到的行为。如果map包含key,没有问题,如果map不包含key,使用下标有一个危险的副作用,会在map中插入一个key的元素,value会取默认值0。
map提供了两种方式,查看是否包含key,m.count(key),m.find(key)。
m.count(key):由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
m.find(key):返回迭代器,判断是否存在。
简单DP (Preparing for Xtreme 12.0) | STL map使用的更多相关文章
- URAL 1203 Scientific Conference 简单dp 难度:0
http://acm.timus.ru/problem.aspx?space=1&num=1203 按照结束时间为主,开始时间为辅排序,那么对于任意结束时间t,在此之前结束的任务都已经被处理, ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
- poj1189 简单dp
http://poj.org/problem?id=1189 Description 有一个三角形木板,竖直立放.上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每颗钉子和周 ...
- 『简单dp测试题解』
这一次组织了一场\(dp\)的专项考试,出了好几道经典的简单\(dp\)套路题,特开一篇博客写一下题解. Tower(双向dp) Description 信大家都写过数字三角形问题,题目很简单求最大化 ...
- 简单 dp
1.摆花问题 题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过a ...
- HDU 5375 Gray code (简单dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375 题面: Gray code Time Limit: 2000/1000 MS (Java/Oth ...
- 洛谷P1130红牌(简单DP)
题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括NNN个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都 ...
- 4.15 每周作业 —— 简单DP
免费馅饼 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- hdu2067 简单dp或者记忆化搜索
题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- vue echarts 给饼图中间添加文字 ,并且添加多个样式
最近根据设计要求写了一个统计图,以下是设计要求,要求中间文字分别是总数和汉字,样式分别不同 好吧具体的解决方案如下 方案一 series: [ { type:'pie', radius: ['50%' ...
- VGDB提示
由于之前地址的版本在未安装.Net 4.0的电脑上安装会出现插件使用装载失败的问题,已更新,新地址为:http://pan.baidu.com/s/1xdnuD,此版本需要.Net 2.0.
- 弹性网卡支持私网多IP
摘要: 弹性网卡支持多IP功能可以最多在一块弹性网卡配置20个私网IP地址,特别适用于于以下场景. 1.单个服务器上托管多个应用,提升实例利用率,每个应用对外暴露一个独立的服务IP地址. 2.当实例发 ...
- shiro框架的组成和内部结构(下一篇为spring整合shiro)
1.shiro简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,Shir ...
- selenium python bindings 元素定位
1. 辅助 Firepath Firefox是所有做前端的必不可少的浏览器因为firebug的页面元素显示很清晰.用selenium 去定位元素的时候Firefox还有一个非常友好的工具就是firep ...
- (1)python tkinter-窗体
1.导入自带的包名 import tkinter 2.创建一个窗体对象 form=Tkinter.Tk() 3.显示窗体(这句应该是所有的设置部署完最后执行的一句代码) form.mainloop() ...
- Office2016只安装三件套方法
转载 Office2016只安装三件套方法(word,ppt,excel) 2019-03-01 23:30:03 Kellen5l 阅读数 11618更多 分类专栏: Office 版权声明:本 ...
- Linux QtCreator 创建工程
这一天天的,都快成废物了, 每天忙得要死, 各种乱七八糟杂事,连点学习的时间都没有了, 这才一年不碰Linux,创建工程都不会了, Ubuntu 1N.N.N + QtCreator 创建工程 不安装 ...
- 一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉
环境如下: Centos6.5 Apache Hadoop2.7.1 Apache Hbase0.98.12 Apache Zookeeper3.4.6 JDK1.7 Ant1.9.5 Maven3. ...
- (转)linux centos 编译luabind-0.9.1 动态库 静态库
编译时:virtual memory exhausted: Cannot allocate memory 一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual ...