博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 4901 The Romantic Hero(dp)
阅读量:6299 次
发布时间:2019-06-22

本文共 1737 字,大约阅读时间需要 5 分钟。

题意

给n个数,构造两个集合,使第一个集合的异或和等于第二个集合的相与和,且要求第一个集合的元素下标都小于第二个集合的元素下标。问方案数

分析

dp来做。dp1[i][j]表示0~i的元素异或和为j的个数。dp2[i][j]表示i~n-1的元素相与和为j的个数。注意状态转移时要同时计算第i个数参与或不参与的情况,且dp1的第一维不能取到n-1,类似的,dp2的第一维不能取0。统计最终答案时需要合并,那么怎么才能防止重复呢?这时再添加dp3[i][j]表示i~n-1的元素相与和为j的个数(i在集合中)。这样枚举i时,就能保证不重复不遗漏了。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rep(i,e) for(int i=0;i<(e);i++)#define rep1(i,e) for(int i=1;i<=(e);i++)#define repx(i,x,e) for(int i=(x);i<=(e);i++)#define X first#define Y second#define PB push_back#define MP make_pair#define mset(var,val) memset(var,val,sizeof(var))#define scd(a) scanf("%d",&a)#define scdd(a,b) scanf("%d%d",&a,&b)#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)#define pd(a) printf("%d\n",a)#define scl(a) scanf("%lld",&a)#define scll(a,b) scanf("%lld%lld",&a,&b)#define sclll(a,b,c) scanf("%lld%lld%lld",&a,&b,&c)#define IOS ios::sync_with_stdio(false);cin.tie(0)using namespace std;typedef long long ll;template
void test(T a){cout<
<
void test(T a,T2 b){cout<
<<" "<<
void test(T a,T2 b,T3 c){cout<
<<" "<<<" "<
<
0; i--) { dp2[i][a[i]]++; dp3[i][a[i]]++; //单独一个元素构成一个集合 for(j = 0; j < MAXN; j++) { if(dp2[i+1][j]) { dp2[i][j] += dp2[i+1][j]; //不添加第i个元素进行按位与 dp2[i][j] %= mod; t = j & a[i]; //添加第i个元素进行按位与 dp2[i][t] += dp2[i+1][j]; dp2[i][t] %= mod; dp3[i][t] += dp2[i+1][j]; //添加第i个元素进行按位与 dp3[i][t] %= mod; } } } int ans = 0; for(i = 0; i < n - 1; i++) { for(j = 0; j < MAXN; j++) { if(dp1[i][j] && dp3[i+1][j]) { ans += (ll(dp1[i][j]) * dp3[i+1][j] % mod); ans %= mod; } } } printf("%d\n", ans); } return 0;}

 

转载于:https://www.cnblogs.com/fht-litost/p/9298096.html

你可能感兴趣的文章
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>