【问题描述】

“牵着你的手的是她,路边开满了紫色的百合花……”

你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’。你想挑出其中一些组成“一束百合花”且价值在二进制下恰好为一个‘1’后面P个‘0’,那么有多少种挑选方案呢?

定义“一束百合花”的价值为这些百合花组成的集合的所有子集的权值乘积的和(空集的权值乘积算1)。如价值为1和3组成的一束百合花价值为1+1+3+1*3=8

【输入格式】

一行两个正整数N,P,含义如题目中所示n,p<=100000

【输出格式】

一个整数代表方案数模 998244353 的结果

【样例输入1

3 3

【样例输出1

2

【样例输入2

233 666

【样例输出2

572514965

稍稍运用一下数学知识发现题目要求的是选出的集合每个元素+1之后的乘积等于2^P的方案数,取个log就变成了↓

在1~N选若干个数使得总和等于P,求方案数

然后用普通的背包DP可以就拿到60分了

 然后我们发现,由于物品大小是1~N,所以最多选取O(sqrt(P))个物品,背包就满了

满分做法可以用状态f[i][j]表示选i个物品,占容量为j的方案数

由于每个背包是不同的,所以根据已选的最小的物品分类讨论一下:

如果最小的物品是1,相当于i-1个物品凑出了j-i的大小,然后整体+1

如果最小的物品不是1,相当于i个物品凑出了j-i的大小,然后整体+1

需要注意我们要防止出现选择了大小为N+1的物品的情况,所以需要减去

得到递推式f[i][j]=f[i-1][j-i]+f[i][j-i]-f[i-1][j-(N+1)]

时间复杂度O(Nsqrt(N))

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long lol;
 7 lol Mod=998244353;
 8 int f[451][100011];
 9 lol ans;
10 lol n,p;
11 int main()
12 {lol i,j;
13     cin>>n>>p;
14     f[0][0]=1;
15     for (i=1;i*(i+1)/2<=p;i++)
16     {
17         for (j=i;j<=p;j++)
18         {
19             f[i][j]=f[i-1][j-i]+f[i][j-i];
20             if (j>=(n+1)) f[i][j]-=f[i-1][j-n-1];
21             if (f[i][j]<0) f[i][j]+=Mod;
22             if (f[i][j]>=Mod) f[i][j]-=Mod;
23         }
24         ans=(ans+f[i][p])%Mod;
25     }
26     cout<<ans%Mod;
27 }

【问题描述】

“牵着你的手的是她,路边开满了紫色的百合花……”

你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’。你想挑出其中一些组成“一束百合花”且价值在二进制下恰好为一个‘1’后面P个‘0’,那么有多少种挑选方案呢?

定义“一束百合花”的价值为这些百合花组成的集合的所有子集的权值乘积的和(空集的权值乘积算1)。如价值为1和3组成的一束百合花价值为1+1+3+1*3=8

【输入格式】

一行两个正整数N,P,含义如题目中所示

【输出格式】

一个整数代表方案数模 998244353 的结果

【样例输入1

3 3

【样例输出1

2

【样例输入2

233 666

【样例输出2

572514965

【数据范围与约定】

测试点编号

N

P

1

≤ 8

≤ 100

2

≤ 12

≤ 100

3

≤ 15

≤ 100

4

≤ 100

≤ 100

5

≤ 1000

≤ 1000

6

≤ 2000

≤ 2000

7

≤ 100000

≤ 100000

8

≤ 100000

≤ 100000

9

≤ 100000

≤ 100000

10

≤ 100000

≤ 100000

转载于:https://www.cnblogs.com/Y-E-T-I/p/7496356.html

计蒜客NOIP模拟赛(2) D2T2紫色百合相关推荐

  1. 计蒜客NOIP模拟赛4 D2T2 跑步爱天天

    YOUSIKI 在 noip2016 的一道<天天爱跑步>的题爆零后,潜心研究树上问题,成为了一代大师,于是皮皮妖为了测验他,出了一道题,名曰<跑步爱天天>. 有一个以 1 为 ...

  2. 计蒜客NOIP模拟赛4 D2T1 鬼脚图

    鬼脚图,又称画鬼脚,在日本称作阿弥陀签,是一种经典游戏,也是一种简易的决策方法,常常用来抽签或决定分配组合. 下图就是一张鬼脚图,其包含若干条竖线和若干条横线.请注意,横线只能水平连接相邻的两条竖线, ...

  3. 计蒜客NOIP模拟赛(2) D1T1邻家男孩

    凡是一个具有领导力的孩子.现实生活中他特别喜欢玩一个叫做 UNO 的纸牌游戏,他也总是带着其他小朋友一起玩,然后战胜他们.慢慢地,他厌倦了胜利,于是准备发明一种新的双人纸牌游戏. 初始时,每个人手中都 ...

  4. 计蒜客NOIP模拟赛 数三角形

    数三角形 题目描述 刚刚上高中的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决.给定一张无向完全图 G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色.现在,洁洁需要给这张 ...

  5. 计蒜客NOIP模拟D1T2

    原题: 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少.另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离 ...

  6. 【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)

    题干: 蒜头去嘉年华玩儿套圈圈,是这么玩儿的.有一些瓶口口径不同的啤酒瓶,瓶子里面有一些奖品.如果蒜头用手上的圈圈套中了啤酒瓶,那么奖品就归他了. 假设蒜头君无限精准,指哪儿打哪儿,并且蒜头了解到,只 ...

  7. 【计蒜客信息学模拟赛1月月赛 - D】Wish(dp计数,数位)

    题干: 如果一个数大于等于 10且任意连续两位都是质数,那么就称之为 Wish 数.当然,第一个 Wish 数是 11. 比如 97,111,131,119 都是 Wish 数,而 12,136 则不 ...

  8. 【计蒜客2017NOIP模拟赛1】

    D1T1 题面 题解:一开始以为傻题,旋转个坐标系就行了,结果光荣爆零~ 结果发现旋转坐标系后,由于多了一些虚点,锤子砸到虚点上了~gg [没有代码] D1T2 题面 题解:计算出每个边对答案的贡献即 ...

  9. 计蒜客一月入门赛:《三个火枪手》题解

    题目链接(https://nanti.jisuanke.com/t/52314) 有 n 个人,其中有 m 对相互认识的关系. 一个人的知名度定义为 有多少人 和他相互认识. 现在蒜头君需要从这 n ...

最新文章

  1. 平均14915元,2021 年 1 月程序员工资统计出炉
  2. es修改排序_java 如何实现ElasticSearch自定义排序
  3. C~K的班级_JAVA
  4. 关于springboot工具类中@Autowired注入bean,用static直接修饰,静态方法使用bean时报空指针异常错误...
  5. 视频:参加ZDNet《小崔说事》谈知识管理
  6. 使用Spring Security的多租户应用程序的无状态会话
  7. Python类与对象实验
  8. sql server driver for php,Microsoft SQL Server Driver for PHP
  9. c++ 写入文件_Python学习第52课-写入文件
  10. mate10支持html,华为Mate 10再曝光:配置强劲,全面屏十分惊艳
  11. Spring源码解析(五)——自定义标签解析
  12. windows服务器nginx日志分割
  13. 计算机硬件人员专业知识技能,电子计算机(微机)装配调试员
  14. 【场景化解决方案】OA审批与金蝶云星空集成
  15. ROC、PR曲线、AUC值
  16. html表格新插入一列,VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-...
  17. pyqt:让qlabel的图片根据鼠标指向的位置进行放缩
  18. 洗地机哪个牌子好?口碑最好的洗地机
  19. lj245a引脚功能图_急,谁能提供给我74ls245的功能说明和引脚图,谢谢了
  20. 《经济半小时》 20130906 指尖上的商机(五)数据时代

热门文章

  1. Docker的启动与停止命令
  2. java final类 能被继承吗_Java中的类被final关键字修饰后,该类将不可以被继承()...
  3. 有关T-SQL的10个好习惯
  4. 如何将通达信的预警股票发送到微信
  5. 外卖(food) 洛谷4040宅男计划 三分套二分贪心
  6. linux mariadb
  7. Redis学习笔记(八)——持久化
  8. LuoGu P1909 买铅笔???
  9. 史上最具体Android集成QQ,微信,微博分享(不用第三方)持续更新中
  10. SpringMVC之Http标准的头部信息