nyoj 1189 yougth和他的朋友们 (DP)
2024-08-28 09:05:37
题目: 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;
}
最新文章
- MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
- unity文件解析以及版本控制
- Base64简介
- 双系统下删除Linux系统方法和Windows无法启动问题的解决方法
- iOS 地图
- DDD:订单管理 之 如何组织代码
- MBR解析
- 斯坦福数据挖掘Introduction
- C# 知识点记录(持续更新中)
- SQLite 字符串连接
- 5、Spring+Struts2+MyBatis+分页(mybatis无代理)增删改查
- javascript学习01
- html5新增标签集锦
- AnsiString用法(转)
- 在python3中安装mysql扩展,No module named &#39;ConfigParser&#39;
- 在webpack中区分环境变量
- 【强化学习】python 实现 q-learning 例五(GUI)
- mac xcode 常见配置
- C语言---选择结构和循环结构
- Python实现一条基于POS算法的区块链
热门文章
- BA--无风机冷却塔
- [HTML5] Accessibility Implementation for complex component
- Hit 2255 Not Fibonacci
- FOJ题目Problem 2082 过路费 (link cut tree边权更新)
- IOS写一个能够支持全屏的WebView
- 0x06 倍增
- 谷歌开源可视化工具Facets,将用于人+AI协作项目研究——无非就是一个用于特征工程探索的绘图工具集,pandas可以做的
- 利用Spring Hibernate注解packagesToScan的简化自动扫描方式
- python之--初始面向对象
- HD-ACM算法专攻系列(19)——Leftmost Digit