题目:

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代码:

  1. #include <cstring>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <queue>
  6. #include <vector>
  7. #include <map>
  8. using namespace std;
  9. typedef long long LL;
  10. const int N = 1100100;
  11. LL dp[3][N];
  12. int a[50];
  13. int main()
  14. {
  15. int n,m;
  16. while(~scanf("%d%d",&n,&m))
  17. {
  18. memset(dp,0,sizeof(dp));
  19. int ma = 0;
  20. for(int i=1;i<=n;i++)
  21. {
  22. scanf("%d",&a[i]);
  23. if(a[i]>ma)
  24. ma = a[i];
  25. }
  26. dp[0][0] = 1;
  27. for(int i=1;i<=n;i++)
  28. {
  29. memset(dp[i%2],0,sizeof(dp[i%2]));
  30. for(int j=0;j<=ma;j++)
  31. {
  32. dp[i%2][j^a[i]] += dp[(i+1)%2][j];
  33. dp[i%2][j] += dp[(i+1)%2][j];
  34. if((j^a[i])>ma)
  35. ma = (j^a[i]);
  36. }
  37. }
  38. LL ans = 0;
  39. for(int i=m;i<=ma;i++)
  40. ans+=dp[n%2][i];
  41. printf("%lld\n",ans);
  42. }
  43. return 0;
  44. }

nyoj 1189 yougth和他的朋友们 (DP)的更多相关文章

  1. NYOJ 914 Yougth的最大化

    Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 Yougth如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...

  2. NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】

    914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...

  3. 一个简单题,引发的思索 + nyoj 1189

    题目描述:第一行:给你两个数m和n,m表示有m个数,然后下一行输入m个数,每个数只能选择一次,统计共有多少种情况使得所选数的和大于等于n: 解决本题我想到了两种方法,(题目自己想的,先不考虑超时),第 ...

  4. NYOJ 18 The Triangle 填表法,普通dp

    题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=18 The Triangle 时间限制:1000 ms  |  内存限制:6553 ...

  5. nyoj 1216——整理图书 CF 229D—— Towers——————【dp+贪心】

    整理图书 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 小明是图书鹳狸猿,他有很多很多的书堆在了一起摆在了架子上,每摞书是横着放的,而且每摞书是订好的 是一个整体, ...

  6. nyoj 214 单调递增子序列(二) 【另类dp】

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 ,a2...,an}(0<n<=100000),找出单调递增最长子序列.并求出其长度 ...

  7. nyoj 17

    // nyoj 17        代码如上,用的是dp,总的来说就是对一个字符串 从末尾开始比较,设定一个数组,存放每个单调字串的最大长度,最后比较... //要注意的就是里面if语句对于每次字符比 ...

  8. [STOI2014]舞伴(dp)

    STOI是汕头OI...无聊翻到了去年的比赛题目,就写然后自己测了一下. 其实我很想吐槽为什么题目名是perm,perm好像和舞伴完全无关.. dp(x,s)=∑dp(x-1,s-{i}))(0< ...

  9. C语言积累一点点

        778. 水位上升的泳池中游泳https://leetcode-cn.com/problems/swim-in-rising-water/ 839. 相似字符串组 https://leetco ...

随机推荐

  1. powershell远程访问

    在服务器上打开powershell 1.winrm quickconfig 2.Enable-PSRemoting -Force 在客户端上打开powershell 1.Enter-PSSession ...

  2. F - Truck History

    F - Truck History #include<cstdio> #include<cstring> #include<iostream> #include&l ...

  3. mac下安装配置java开发环境

    可以使用homebrew下载相关软件,以下具体讲一下环境的配置: mac下安装jdk vi .bash_profile 输入i,进入编辑模式 输入以下配置,其中JAVA_HOME是你的jdk安装目录 ...

  4. Spring使用HibernateDaoSupport操作数据

    spring提供了一个数据訪问层的类:org.springframework.orm.hibernate3.support.HibernateDaoSupport.一般是让 dao继承该类,然后在da ...

  5. Android 对话框(Dialog) 及 自己定义Dialog

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  6. unity3d Pathfinding插件使用

    Overview The central script of the A* Pathfinding Project is the script 'astarpath.cs', it acts as a ...

  7. php中的self关键字和this关键字的区别和联系

    php中的self关键字和this关键字的区别和联系 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程 ...

  8. nyoj--118--修路方案(次小生成树)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修路. ...

  9. 16.unix网络编程一卷 unp.h

    unix网络编程 --ubuntu下建立编译环境 1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下 ...

  10. 写函数,输入n个数字输出最大值和最小值

    # ,写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置 ...