码迷,mamicode.com
首页 > 其他好文 > 详细

LA4794 Sharing Chocolate

时间:2017-09-29 23:09:01      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:表示   int   ++i   ring   target   alt   相加   lock   lan   

传送门

记忆化搜索。

在下觉得sxy大佬的代码写得相当好,通篇的骚操作(因为我都不会呀),%%% 学到了

 

预处理每个状态的值。以前的我都是zz地枚举每一位。。

for(int i=1;i<(1<<n);++i) {

         x=(i&(-i));

              if(i==x) continue;

              tot[i]=tot[x]+tot[i^x];

}

 

f[r][s]==1表示搜索过且不合法,f[r][s]==2表示搜索过且合法

  if(f[r][s]) return f[r][s]-1;

 

若是只剩一块巧克力要分

 if(s==(s&(-s))) return f[r][s]=2,1;

 

枚举子集,y为x在s下的补集

 for(x=(s-1)&s;x;x=(x-1)&s) {

        y=s-x;
}

 

两维状态值相加或相乘为定值时,用一维来代替也是一个常见的套路。

 

LA4794 Sharing Chocolate

标签:表示   int   ++i   ring   target   alt   相加   lock   lan   

原文地址:http://www.cnblogs.com/Achenchen/p/7612717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!