您的位置:首页 > 其它

SHTSC记 13.10.06

2013-10-13 11:53 176 查看
首先还是上次课的答案

例1 设d(i,j)为从i到j的答案,所求即为d(0,n-1)转移是这样的

i>=j 0

s[i]==s[j] 则为d(i+1,j-1)

s[i]!=s[j] min(d(i,j-1),d(i+1,j))+1

这题基本属于会的秒杀,不会的肯定做不出

例2 T37

设f(i,j)为这个区间先手拿的最大值,所求即为f(1,n)

f(i,j)=max(a[i]+g(i+1,j),a[j]+g(i,j-1))

g(p,q)为这个区间后手拿的最大值

g(i,j)=s[j]-s[i-1]-f(i,j)

f(i,j)=max(s[j]-s[i]-f(i+1,j)+a[i],s[j-1]-s[i-1]-f(i,j-1)+a[j])

=max( s[j]-s[i-1]-f(i+1,j) , s[j]-s[i-1]-f(i,j-1) )

=s[j]-s[i-1] -min(f(i,j-1),f(i+1,j))

边界:f(i,i)=a[i]

例3 石子合并

线形版

法1 f(i,j)为区间答案 f(i,j)=min( f(i,k) + f(k+1,j) )  i<=k<j  +a[i]+...+a[j]

法2 f(i,l)为i为起点l为长度的答案,f(i,l)=min ( f(i,k)+ f(k+i,l-k) ) 1<=k<l + a[i]+..a[i+l-1]

环状版

法1就比较麻烦了,要写两遍数组?

法2 f(i,l)=min ( f(i,k) + f( (k+i-1) % n +1 ,l-k) ) 1<=k<l  +a[i]+..+a[l+i-1] (具体实现应该要讨论)

例4 T39

32^100000 mod 71

由 费马小定理 32^70 =1 mod 71

原式=32^40 mod 71

=2^200 mod 71

=2^60 mod 71

=2^ -10 mod 71

=1024 ^-1 mod 71

=30 在mod71下的逆

即求 30*ans=1 mod 71

30*ans + 71 * y=1

exgcd即可

10月6号貌似马融没迟到,不过上中的神犇们都没来(学校补课?)

余爷爷还问我:你是上中的?我。。。

讲的背包问题

例1 给出一个集合S求所有的子集和

用的是P的布尔数组,应该有点慢吧,自己用了set试试,搞了半天搞不出。。

例2 01背包

直接上滚动数组,还说他认为这个好理解。。

然后介绍的二维数组解法

例3 T44

自己曾做过,效率极低但还是过了,用背包问题来解效率高了很多 //USACO能不能控制下打表的问题

例4 T45

例5 T46

例6 T47

例7 T28

讲完之后还兴致勃勃地自己写了些标程。。

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: