补丁vs错误(codevs 2218 错误答案)
错误就是人们所说的Bug。用户在使用软件时总是希望其错误越少越好,最好是没有错误的。但是推出一个没有错误的软件几乎不可能,所以很多软件公司都在疯狂地发放补丁(有时这种补丁甚至是收费的)。T公司就是其中之一。
上个月,T公司推出了一个新的字处理软件,随后发放了一批补丁。最近T公司发现其发放的补丁有致命的问题,那就是一个补丁在排除某些错误的同时,往往会加入另一些错误.
此字处理软件中只可能出现n个特定的错误,这n个错误是由软件本身决定的。T公司目前共发放了m个补丁,对于每一个补丁, 都有特定的适用环境,某个补丁只有在当前软件中包含某些错误而同时又不包含另一些错误时才可以使用,如果它被使用,它将修复某些错误而同时加入某些错误。另外,使用每个补丁都要耗一定的时间(即补丁程序的运行时间)。
更准确地说明:
设此字处理软件中可能出现的n个错误为集合B={b1,b2,…,bn}中的元素,T公司目前共发放了m个补丁:p1,p2,…,pm。对于每一个补丁pi, 都有特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才可以用,为了说明清楚,设错误集合:Bi+、 Bi-, 当软件包含了Bi+中的所有错误, 而没有包含Bi-中的任何错误时,补丁Pi才可以被使用,否则不能使用,显然 Bi+、Bi-交集为空。补丁pi将修复某些错误而同时加入某些错误,设错误集合Fi-、Fi+,使用过补丁pi之后,Fi-中的任何错误都不会在软件中出现,而软件将包含Fi+中的所有错误, 同样Fi-、Fi+交集为空。另外,使用每个补丁都要耗一定的时间(即补丁程序的运行时间)。
现在T公司的问题很简单,其字处理软件的初始版本不幸地包含了集合B中的全部n个错误, 有没有可能通过使用这些补丁(任意顺序地使用,一个补丁可使用多次), 使此字处理软件成为一个没有错误的软件。如果可能,希望找到总耗时最少的方案。
输入文件第一行有两个正整数n和m, n表示错误总数,m表示补丁总数。接下来m行给出了m个补丁的信息。每行包括一个正整数(表示此补丁程序pi的运行耗时)和两个长度为n的字符串,中间用一个空格符隔开。
第一个字符串,如果第k个字符为’+’,则表示bk属于Bi+, 若为‘-’,则表示bk属于Bi-, 若为‘0’,则bk 既不属于Bi+也不属于Bi-,即软件中是否包含bk不影响补丁pi是否可用。
第二个字符串,如果第k个字符为’+’,则表示bk属于Fi+, 若为‘-’,则表示bk属于Fi-, 若为‘0’,则bk 既不属于Fi+也不属于Fi-,即软件中是否包含bk不会因使用补丁pi而改变。
输出一个整数,如果问题有解,输出总耗时,否则输出0。
3 3
1 000 00-
1 00- 0-+
2 0-- -++
8
1<=n<=20, 1<=m<=100
/*
WA,77分
这道题和以前做过的codevs 2594类似,思路都是状态压缩搜索最短路+hash判重,所以直接按原思路做的,但是只得了77分,WA了2个点,但思路应该没问题
==========================================
设立a结构体表示状态,vis[]是该状态的错误情况,vis[i]=1,则错误已修复,否则未修复,step表示该状态所用的消耗;
hash[]记录某个状态是否出现过,即哈希判重,num[]是个二进制数组
bu[i][p][j]:若p=1,则为第i个补丁对第j个错误的使用条件,p=2,为使用效果
*/
#include<cstdio>
#include<iostream>
#define M 110
#define N 25
using namespace std;
struct node
{
int vis[N],step;
};node a[M*M];
int hash[M*M*M],num[N],bu[M][][N],mon[M];
int n,m,head,tail,sum,ff,ans=;
void bfs()
{
while(head<=tail)
{
for(int i=;i<=m;i++)
{
int flag=;
for(int j=;j<=n;j++)
if(bu[i][][j]!=&&bu[i][][j]!=a[head].vis[j])
flag=;
if(!flag)//该补丁可以使用
{
++tail;
for(int j=;j<=n;j++)
a[tail].vis[j]=a[head].vis[j];
a[tail].step=a[head].step+mon[i];
for(int j=;j<=n;j++)
if(bu[i][][j]!=)
a[tail].vis[j]=bu[i][][j];
int pp=;
for(int j=;j<=n;j++)
pp+=a[tail].vis[j]*num[j];
if(pp==sum)
{
ans=min(a[tail].step,ans);
ff=;
}
if(hash[pp])tail--;
else hash[pp]=;
}
}
head++;
}
}
void init()
{
num[]=;sum=;
for(int i=;i<=n;i++)
{
num[i]=num[i-]*;
sum+=num[i];
}
}
int main()
{
scanf("%d%d",&n,&m);
init();
for(int i=;i<=m;i++)
{
char s[M];
scanf("%d",&mon[i]);
cin>>s;
for(int j=;j<=n;j++)
if(s[j-]=='')bu[i][][j]=;
else if(s[j-]=='-')bu[i][][j]=;
else bu[i][][j]=;
cin>>s;
for(int j=;j<=n;j++)
if(s[j-]=='')bu[i][][j]=;
else if(s[j-]=='-')bu[i][][j]=;
else bu[i][][j]=;
}
bfs();
if(ff)printf("%d",ans);
else printf("");
return ;
}
补丁vs错误(codevs 2218 错误答案)的更多相关文章
- 【Web技术】286- 自定义错误及扩展错误
英文:Ilya Kantor 译文:LeviDing https://zh.javascript.info/custom-errors 当我们在进行开发的时候,通常需要属于我们自己的错误类来反映任务 ...
- android导入项目出现style错误,menu错误
android导入项目出现style错误,menu错误 style //查看 res/values/styles.xml 下的报错点. <style name="AppBaseThem ...
- C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令
如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebExce ...
- LabVIEW的错误簇以及错误处理函数
我们可以在LabVIEW的Modern>>Array, Matrix & Cluster控件面板找到表示错误簇数据类型的错误输入(Error In)以及错误输出(Error Out ...
- VS2012编译错误信息,错误列表却没显示
今天在写代码的时候,发现VS有编译错误,在错误列表里面却没有显示错误信息,百思不得其解. 后来终于发现,错误列表弄了个筛选,所以就看不到错误信息了,晕死.有遇到该问题的,可以参考下.
- javaScript 消除错误,并将错误记录在控制台,阻止浏览器错误警告
当我们使用jquery,和其他各种框架时,有的时候会出现各种错误, 例如jquery文件报错,但又不影响功能, 又不能对jquery做出更改,怎么办呢? window.onerror=functi ...
- CAN总线学习记录之三:总线中主动错误和被动错误的通俗解释
首先建议把广泛使用的"主动错误"和"被动错误"概念换成"主动报错"和"被动报错". 1. 主动报错站点 只要检查到错误, ...
- Microsoft JET Database Engine 错误 '80004005' 未指定错误
Microsoft JET Database Engine 错误 '80004005'未指定错误 =====解决=======出现这种“未指定错误”时,可以尝试重新注册ASP脚本解释链接库文件在CMD ...
- EF + MySql 错误:配置错误 无法识别的元素“providers”
“/”应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的元素“providers” ...
随机推荐
- 二、Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)
在Ubuntu14.04下安装Hadoop2.4.0 (单机模式)基础上配置 一.配置core-site.xml /usr/local/hadoop/etc/hadoop/core-site.xml ...
- UIScrollview自动布局,UIScrollviewAutolayoutDemo
参考文档:http://www.cocoachina.com/ios/20150104/10810.html UIScrollviewAutolayoutDemo地址:http://pan.baidu ...
- memcached 系列2:memcached实例(转载)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点 这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做dae ...
- IE浏览器模式设置
文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...
- (转)DoDataExchange执行时机
void CRegisterDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DAT ...
- 一个简单的web服务器
写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...
- GPRS GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术
GPRS 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可 ...
- DNS服务器配置
导读 DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域名(domain ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
原文:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...