通过这道题复习一下sosdp。

sosdp用于求解子集和。

我们设\(f[i][s]\)表示后\(i\)位是\(s\)的子集,前\(n-i\)位等于\(s\)的\(a\)中的数的和

在从\(f[i][s]\)转移到\(f[i+1]\)时,需要分2种情况讨论。

1.当\(s\)的第\(i+1\)位是\(1\),\(f[i+1][s]=f[i][s]+f[i][s xor 2^i]\)

2.当\(s\)的第\(i+1\)位是\(1\),\(f[i+1][s]=f[i][s]\)

这道题事实上可以类似sosdp,然后把这个过程反着做。

#include<bits/stdc++.h>
using namespace std;
int n,a[1000000],pw[1000],f[1000000][15];
int main(){
pw[0]=1;
for(int i=1;i<14;i++)
pw[i]=pw[i-1]*3;
scanf("%d",&n);
for(int i=0;i<pw[n];i++)
scanf("%d",&a[i]);
for(int i=0;i<pw[n];i++)
f[i][0]=a[i];
for(int i=0;i<n;i++)
for(int j=0;j<pw[n];j++){
int wz=(j/pw[i])%3;
int pz=wz*pw[i];
int p1=f[j-pz][i],p2=f[j-pz+pw[i]][i],p3=f[j-pz+pw[i]*2][i];
if(wz==0)
f[j][i+1]=p2-p3;
else if(wz==1)
f[j][i+1]=p3+p1-p2;
else
f[j][i+1]=p2-p1;
}
for(int i=0;i<pw[n];i++)
printf("%d ",f[i][n]);
}

最新文章

  1. ZOJ Problem Set - 1394 Polar Explorer
  2. CentOS7 yum 安装git
  3. cocos2d-x之内存管理(4)
  4. 作为WEB工程师,我们是不是应该积极的推进一下用户浏览器的使用体验?
  5. NYOJ-206 矩形的个数 AC 分类: NYOJ 2013-12-29 22:19 265人阅读 评论(0) 收藏
  6. html 使用表单标签,与用户交互
  7. 学了一个封装的jquery插件,感觉还成
  8. wamp安装
  9. AngularJS 疑难问题解决汇总
  10. 纯CSS做的一个Silder
  11. adesk上架实施--VDC详细配置(深信服论坛转)
  12. pip安装软件或模块时提示cannot import name &#39;main&#39;
  13. gcc:call to &#39;__open_missing_mode&#39; declared with attribute error
  14. 释放锁标记只有在Synchronized代码结束或者调用wait()。
  15. AX_Function
  16. Python练习-8
  17. HTML学习笔记08-表格
  18. Mac OS X使用简介
  19. HDU 4405 Aeroplane chess 期望dp
  20. 获取Linux下的IP地址 java代码

热门文章

  1. Golang依赖管理工具: go module 详解
  2. 【面试题】 用vue想要拿20k,面试题要这样回答(源码版)
  3. asp.net.core学习笔记1:swagger的使用和webapi接收Jobject对象
  4. iOS 绘制虚线
  5. 用keil调试程序的时候,一点击调试就弹出STARTUP.A51那个窗口,解决办法
  6. docker之rabbitmq delayed message exchange
  7. C# 前台线程 后台线程区别
  8. Java编码规范总结(腾讯)
  9. 《在编译两个不同的库时,不想相互include头文件,但又需要用到对方的函数,可以用extern》
  10. 关于flex