切换到宽版
  • 5503阅读
  • 0回复

我想的方程,希望大家帮忙看看(据说是经典DP) [复制链接]

上一主题 下一主题
离线nightingale
 
只看楼主 正序阅读 0 发表于: 2007-08-09
— 本帖被 stevenjl 从 竞赛题库 移动到本区(2007-08-09) —

麻烦了!谢谢!



数字组合

在N个数中找出其和为M的若干个数。先读入正整数N(1<N<100)和M(1<M<10000), 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同)。要求你的程序运行时间不超过1秒。
[样例]:
compages .in
4 4
1 1 2 2

compages .out
3
h[i,j]=h[i-1,j]+h[i-1,j-v[i]](h[i,j]表示前i个数组成和为j的个数)(这个还比较简单)


相似基因
大家都知道,基因可以看作一个碱基对序列。它包含了4种核苷酸,简记作A,C,G,T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。
在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。两个基因的相似度的计算方法如下:
对于两个已知基因,例如AGTGATG和GTTAG,将它们的碱基互相对应。当然,中间可以加入一些空碱基-,例如:
A  G  T  G  A  T  -  G 
-  G  T  -  -  T  A  G 

样例
GENE.IN
7 AGTGATG
5 GTTAG

GENE.OUT
14
取length(a)>length(b),则
h[i,j]=h[i-1,j-1]+5  (a[i]=b[j]) else
    =max{h[i-1,j]-num[a[i]],h[i,j-1]-min{num[a[i]],num[b[j]]}}
(h[i,j]表示字串a的前i位和字串b的前j位匹配所得的最大相似度,num[a[i]](正整数)表示a[i]所对应要扣的分)
这个题的方程我想了两个中午,但还是没什么把握!


护卫队


护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队到达了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。被分在同一组的每一辆车都以其最快的速度通过该桥。一组车队通过该桥的时间是用该车队中速度最慢的车通过该桥所需的时间来表示的。问题要求计算出全部护卫车队通过该桥所需的最短时间值。

t[i]表示第i辆车过桥的时间,max表示当前组的过桥时间
h[i,j]=min{h[i-1,j-1]+t[i],h[i-1,j]}(t[i]<=max)else
    =min{h[i-1,j-1]+t[i],h[k-1,j-1]+t[i]}(k表示当前组的第一辆车的位置)
我想这题是多重背包(有多个背包),但是我没写过多重背包,不知道对不对,不过我想应该没问题吧。
快速回复
限100 字节
 
上一个 下一个