Professional Documents
Culture Documents
作者: dd - engi: ( version 1.1 build 20071115)
作者: dd - engi: ( version 1.1 build 20071115)
http://www.oiers.cn/pack/Index.html
(dd_engi)
NOIP
v1.1 2007 11 15
OI ACM-ICPC
OIBH
01
USACO
USACO Training
P01: 01
N V i c[i]
w[i]
f[i][v] i v
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
i
v i
i-1 i
i-1 v
f[i-1][v] i i-1
v-c[i] f[i-1][v-c[i]]
i w[i]
O(VN)
O
i=1..N
f[i][0..V]
f[0..V] i f[v]
f[i][v]f[i][v] f[i-1][v] f[i-1][v-c[i]]
f[i][v] i f[v] f[i-1][v]
f[i-1][v-c[i]] v=V..0
for i=1..N
for v=V..0
f[v]=max{f[v],f[v-c[i]]+w[i]};
f[v]=max{f[v],f[v-c[i]]}
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]} f[v-c[i]]
f[i-1][v-c[i]] v
f[i][v] f[i][v-c[i]]
P02 01
01
01
ZeroOnePack 01
costweight
procedure ZeroOnePack(cost,weight)
for v=V..cost
f[v]=max{f[v],f[v-cost]+weight}
v=V..0
cost f[0..cost-1]
01
for i=1..N
ZeroOnePack(c[i],w[i]);
f[0]
0 f[1..V]- f[N]
f[0..V] 0
f
0 0 nothing
-
0 0
for v=V..1
f[v] f[v-w[n]]
j f[v-sum{w[j..n]}]
for i=1..N
for v=V..0
for i=1..n
bound=max{V-sum{w[i..n]},c[i]}
for v=V..bound
01
01
P02:
N V i
c[i] w[i]
01
0
1 2 01 f[i][v]
i v
f[i][v]=max{f[i-1][vk*c[i]]+k*w[i]|0<=k*c[i]<=v}
01 O(VN)
f[i][v] O(v/c[i])
O(V*(V/c[i]))
01
01
ij
c[i]<=c[j] w[i]>=w[j] j
j i
O(N^2)
V
O (V+N)
01
01
01 i
V/c[i] i V/c[i]
01
01
i c[i]*2^k
w[i]*2^k k c[i]*2^k<=V
i 2^k
O(log V/c[i])
O(VN)
O(VN)
for i=1..N
for v=0..V
f[v]=max{f[v],f[v-cost]+weight}
P01 v
P01 v=V..0
i f[i][v]
f[i-1][v-c[i]]
i
i f[i-1][v-c[i]]
i
i f[i][v-c[i]]
v=0..V
for
f[i][v-c[i]]
f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}
procedure CompletePack(cost,weight)
for v=cost..V
f[v]=max{f[v],f[v-c[i]]+w[i]}
O(VN)
P03:
N V i n[i]
c[i] w[i]
i n[i]+1 0
1 n[i] f[i][v] i v
f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}
O(V*n[i])
01
01 i
n[i] 01 n[i] 01
O(V*n[i])
01
i
i 0..n[i]
n[i]
1,2,4,...,2^(k-1),n[i]-2^k+1 k n[i]-2^k+1>0
n[i] 13 1,2,4,6
n[i] n[i] i
0..n[i]
0..2^k-1 2^k..n[i]
i O(log n[i])
<math>O(V*log n[i]) 01
O(log amount)
amount
procedure MultiplePack(cost,weight,amount)
if cost*amount>=V
CompletePack(cost,weight)
return
integer k=1
while k<amount
ZeroOnePack(k*cost,k*weight)
amount=amount-k
k=k*2
ZeroOnePack(amount*cost,amount*weight)
O(VN)
O(VN)
O(1)
DP NOIP
O(V*n[i])
O(V*log n[i]) NOIP
O(VN)
P04:
P01P02P03
01
01
P01 P02
O(VN)
for i=1..N
if i 01
for v=V..0
f[v]=max{f[v],f[v-c[i]]+w[i]};
else if i
for v=0..V
f[v]=max{f[v],f[v-c[i]]+w[i]};
O(VN)
NOIP P03 O(log
n[i]) 01
for i=1..N
if i 01
ZeroOnePack(c[i],w[i])
else if i
CompletePack(c[i],w[i])
else if i
MultiplePack(c[i],w[i],n[i])
01
P05:
1 2 i a[i]
b[i] V U
w[i]
f[i][v][u] i
v u
f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]}
v u
M
1 M
f[v][m] v m
01 f[0..V][0..M]
P11
P06:
N V i c[i]
w[i]
f[k][v] k v
f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]| i k}
for k
for v=V..0
for i k
f[v]=max{f[v],f[v-c[i]]+w[i]}
beta
for v=V..0for i k
P02
P07
P07:
i
j i j
NOIP2006
n 2^n+1
P06
P06 P02
i 01 0..V-c[i]
f'[0..V-c[i]]
V-c[i]+1 c[i]+k
f'[k]+w[i]
01 i V-c[i]+1
P06
01
DP
DP
P08
NOIP2006
P08:
V
0..V h v
h(v)
h[0..V] v h[V]
c w 01
h(c)=w 0
v
c h(v)=v/c*w 0
n h(v)=v/c*w
v c v/c<=n 0
h 0..V v
v h(v)=0 h(v) v
P07
h l
v
0..V
v v h l f(v)
f(v)=max{h(k)+l(v-k)|0<=k<=v}
f h l 0..V
f h l
hl f
f h l
O(V^2)
s s[0..V]
v v
0..V
Scheme
NOIP OI
OIer
P09:
max min
01
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} g[i][v]
g[i][v]=0 f[i][v]
f[i][v]=f[i-1][v]g[i][v]
i i
f[N][V]
i=N
v=V
while(i>0)
if(g[i][v]==0)
print " i "
else if(g[i][v]==1)
print " i "
v=v-c[i]
f[i][v] g
g[i][v]==0 f[i][v]==f[i-1][v]g[i][v]==1 f[i][v]==f[i-1][v-c[i]]+w[i]
1..N
01
1 1
v-c[1] 2..N 1
V 2..N
i..N 1..i
N 1 f[i][v]==f[i-1][i-v]
f[i][v]==f[i-1][f-c[i]]+w[i] i
max
sum
f[i][v]=sum{f[i-1][v],f[i][v-c[i]]}
f[0][0]=1
01
f[i][v]g[i][v]
f[i][v] g[i][v]
for i=1..N
for v=0..V
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
g[i][v]=0
if(f[i][v]==f[i-1][v])
inc(g[i][v],g[i-1][v])
if(f[i][v]==f[i-1][v-c[i]]+w[i])
inc(g[i][v],g[i-1][v-c[i]])
K
K
K K
max/min 01
01
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} K
f[i][v] K f[i][v][1..K] f[i][v][k]
i v k f[i][v] K
C
f[i][v][1..K] K
f[i][v] f[i-1][v]
f[i-1][v-c[i]]+w[i] f[i-1][v]
f[i-1][v][1..K]f[i-1][v-c[i]]+w[i] f[i-1][v-c[i]][1..K]
w[i] K
K
K max
NOIP
OIer
USACO
USACO USA Computing Olympiad
USACO Trainng
Inflate (+) 01
Stamps (+)(!)
Money
Nuggets
Subsets
Rockers (+)
Milk4 (!) DP
USACO
DD USACO
Inflate 01
f[k][i] = max{f[k-1][i] ,
f[k-1][i-v[k]]+w[k]}f[k][i] k i
v[k] w[k] k f[k]
k f[k-1]
f[i] k
f[i] f[i-v[k]]+w[k]
stamps
f[k][i] k i
f[k][i]= min{f[k-1][i],f[k-1][i-j*s[k]]+j} j
k
Money
min sum
Nuggets
ij
xy i*x+y*j=n n>i*j
Subsets N
N*(N+1)/4 01
Rockers
f[i][j][t]=max{f[i][j][t-1] , f[i-1][j][t] , f[i-1][j][t-time[i]]+1 ,
f[i-1][j-1][T]+(t>=time[i])} f[i][j][t] i j
t T
t>=time[i] bool int 0 1
f[i][j]=(a,b)
i j a b
Milk4
DP
DP USACO
AC DP
f[k] k
f
i pre_f[i] pre_v[i]
i pre_f[i] pre_v[i]
i
f
USACO
P11:
01
01 O(2^N)
2^N
procedure SearchPack(i,cur_v,cur_w)
if(i>N)
if(cur_w>best)
best=cur_w
return
if(cur_v+v[i]<=V)
SearchPack(i+1,cur_v+v[i],cur_w+w[i])
SearchPack(i+1,cur_v,cur_w)
cur_v cur_w
SearchPack(1,0,0)
NP-Complete 01
S X S
X
O(2^(N/2))
N S
S S1 S2
N/2 S1 S2 2^(N/2)
hash set
X S
S1 X1 S2 X-X1
N=42
DP?
DP V O(VN)
N V V
N
DP
http://kontactr.com/user/tianyi/
OI
OIBH
jason911
donglixp
LeafDuo
XiaQ beta
sfita P01
Emacs
EmacsMuse