题目:

pid=1189" target="_blank">nyoj 1189 yougth和他的朋友们

这题目是14年北京赛区的原题。讲题的时候说有三种解法,我们是用dp做的当时。原题目链接:Happy Matt Friends

题意就不在说了。由于要求的是满足条件的种数。

我们定义状态dp【i】【j】:当我们把第 i 个数放进去之后得到 j 的种数是多少

那么我们能够得到状态转移方程:dp【i】【j^ a [ i ] 】 += dp【i-1】【j】

就是当前得到每一个 j ^  a [ i ] 有前 i-1 个数得到。整个dp一遍就是得到结果了。

还有注意这里数组比較大。直接开的话会超内存,所以要用滚动数组优化。



AC代码:

#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <queue>
#include <vector>
#include <map>
using namespace std;
typedef long long LL;
const int N = 1100100;
LL dp[3][N];
int a[50];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(dp,0,sizeof(dp));
int ma = 0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>ma)
ma = a[i];
}
dp[0][0] = 1;
for(int i=1;i<=n;i++)
{
memset(dp[i%2],0,sizeof(dp[i%2]));
for(int j=0;j<=ma;j++)
{
dp[i%2][j^a[i]] += dp[(i+1)%2][j];
dp[i%2][j] += dp[(i+1)%2][j];
if((j^a[i])>ma)
ma = (j^a[i]);
}
}
LL ans = 0;
for(int i=m;i<=ma;i++)
ans+=dp[n%2][i];
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
  2. unity文件解析以及版本控制
  3. Base64简介
  4. 双系统下删除Linux系统方法和Windows无法启动问题的解决方法
  5. iOS 地图
  6. DDD:订单管理 之 如何组织代码
  7. MBR解析
  8. 斯坦福数据挖掘Introduction
  9. C# 知识点记录(持续更新中)
  10. SQLite 字符串连接
  11. 5、Spring+Struts2+MyBatis+分页(mybatis无代理)增删改查
  12. javascript学习01
  13. html5新增标签集锦
  14. AnsiString用法(转)
  15. 在python3中安装mysql扩展,No module named &#39;ConfigParser&#39;
  16. 在webpack中区分环境变量
  17. 【强化学习】python 实现 q-learning 例五(GUI)
  18. mac xcode 常见配置
  19. C语言---选择结构和循环结构
  20. Python实现一条基于POS算法的区块链

热门文章

  1. BA--无风机冷却塔
  2. [HTML5] Accessibility Implementation for complex component
  3. Hit 2255 Not Fibonacci
  4. FOJ题目Problem 2082 过路费 (link cut tree边权更新)
  5. IOS写一个能够支持全屏的WebView
  6. 0x06 倍增
  7. 谷歌开源可视化工具Facets,将用于人+AI协作项目研究——无非就是一个用于特征工程探索的绘图工具集,pandas可以做的
  8. 利用Spring Hibernate注解packagesToScan的简化自动扫描方式
  9. python之--初始面向对象
  10. HD-ACM算法专攻系列(19)——Leftmost Digit