谁给个pascal程序?高分求助!!!

来源:百度知道 编辑:UC知道 时间:2024/05/23 00:30:50
6.补丁(bugs)
程序名: bugs.pas
输入文件名: bugs.in
输出文件名: bugs.out
问题描述:
一个程序总有个错误,公司经常发布补丁来修正这些错误,遗憾的是,每用一个补丁,在修正某些错误的时候,同时会加入某些错误,每个补丁都有一定运行时间。
某公司发表了一个游戏,出现了n个错误B={b1,b2,b3,……bn},于是该公司发布了m个补丁,每个补丁的应用都是有条件的(即哪些错误必须存在,哪些错误不能存在)。
求最少需要多少时间可全部修正这些错误。

输入:
输入文件第一行有两个正整数n和m,n表示错误总数,m表示补丁总数,1<=n<=20,1<=m<=100。接下来m行给出了m个补丁的信息。每行包括一个正整数(表示此补丁程序的运行时间)和两个字符串,
第一个字符串描述了应用该补丁的条件。字符串的第i个字符,如果是‘+’,表示在软件中必须存在第bi号错误;如果是‘-’,表示软件中错误bi不能存在;如果是‘0’,则表示错误bi存在或不存在均可(即对应用该补丁没用影响)。
第二个字符串描述了应用该补丁的效果。字符串的第i个,如果是‘+’,表示产生了一个新错误bi;如果是‘-’,表示错误bi被修改好了;如果是‘0’,则表示错误bi不变(即原来存在的,仍然存在;原来不存在,还是不存在)。

输出:
输出一个整数,如果问题有解,输出总耗时。否则输出-1。

样例输入:
3 5
1 0-+ -+-
3 +-- -00
4 000 00-
6 +0+ -0-
3 0+0 0-0

样例输出:
7
讲解一下程序给分,加分

用带hash的宽搜就可以

时间复杂度O(10^6)
空间复杂度O(10^6)

程序嘛……
今天太晚了
这两天有时间再给你写
回答者:feizei_lin - 助理 二级 3-28 00:01

program tju1275;const maxn=20;maxm=100; maxsize=1084576;var b,f:array[1..maxm,1..maxn]of shortint; t:array[1..maxm]of integer; p:array[0..maxsize-1]of longint; a:array[0..maxsize-1]of integer; s1,s2:array[1..maxn]of byte; n,m,i,j,op,cl,k:longint; ch:char;function readchar(ch:char):shortint;begin case ch of '-':readchar:=-1; '+':readchar:=1; '0':readchar:=0; end;end;function match(j:longint):boolean;var i:byte;begin match:=false; for i:=1 to n do if (s1[i]=1) and (b[j,i]=-1) then exit else if (s1[i]=0) and (b[j,i]=1) then exit; match:=true;end;begin assign(input,'d:\in.txt'); reset(input); repeat fillchar(a,sizeof(a),0); readln(n,m); for i:=1 to m do begin read(t[i]); read(ch); for j:=1 to n do begin read(ch); b[i,n+1-j]:=readchar(ch); end; read(ch); for j:=1 to n do begin read(ch); f[i,n+1-j]:=r