I. Space Station(hash记忆化+dp)

《文章》陆游
文章本天成,妙手偶得之。
粹然无疵瑕,岂复须人为。
君看古彝器,巧拙两无施。
汉最近先秦,固已殊淳漓。
胡部何为者,豪竹杂哀丝。
后夔不复作,千载谁与期?

I. Space Station

大佬题解
上述题解写的非常棒!思路层层递进,而且马蜂好评

暴力:首先将原数组排序,然后dfs枚举选择顺序,如果当前和已经≥50\ge5050即可利用阶乘算出方案数,复杂度不可算

记忆化搜索:这里就牵扯到如何记忆化搜索?
正解非常巧妙,由于aia_iai的范围很小,这里只记录每个值出现的次数,这个信息已经足够还原原数组的必要信息。

最巧妙的是hash记忆化,当所有数剩下的个数相同时,方案数相同。这里把记录次数的数组进行hash,那么就完成了记忆化!!!

如果想到上面这些,还不行仍然TLE 怎么卡都卡不过去Q-Q
注意到如果ai=0a_i=0ai=0我们什么时候都可以选他,也就是它的选择不被约束,由此我们可以先将0剔除出来,最后直接算0对答案的贡献。
我们的选择是一个排序,只需要把这些0插到选择的过程中即可,最终答案需要乘以(cnt+1)×(cnt+2)×⋯×n(cnt+1)×(cnt+2)×\dots×n(cnt+1)×(cnt+2)××n
cnt是非零数的个数

#include<unordered_map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=100010,mod=1e9+7;
const ull P=131;
int n;
int a[55];
ll fact[N];
unordered_map<ull,ll> dp;
void init()
{fact[0]=1;for(int i=1;i<=100000;i++) fact[i]=fact[i-1]*i%mod;
}
ll dfs(int u,int now)
{if(!u) return 1;if(now>=50) return fact[u];ull hash=0;for(int i=50;i;i--) hash=hash*P+a[i];if(dp[hash]) return dp[hash];ll res=0;for(int i=1;i<=now;i++){if(!a[i]) continue;a[i]--;res=(res+(a[i]+1)*dfs(u-1,now+i)%mod)%mod;a[i]++;}return dp[hash]=res;
}
int main()
{init();int now;cin>>n>>now;int cnt0=0,cnt1=0;for(int i=1;i<=n;i++){int x;cin>>x;if(!x) cnt0++;else a[x]++,cnt1++;}ll ans=dfs(cnt1,now);for(int i=n;i>=cnt1+1;i--)ans=(ans*i)%mod;cout<<ans<<'\n';return 0;
}

第一次见hash记忆化,非常巧妙!!!菜就多练, 要不然训练总挂机
要加油哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpClient参观记:.net core 2.2 对HttpClient到底做了什么?

.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3&#xff0c;在这个版本中&#xff0c;我看到了一个很让我惊喜的新特性&#xff1a;HTTP Client Performance Improvements &#xff0c;而且在Linux上性能提升了60% !之前就一直苦于 HttpClient 的糟糕特性&#xff…

【线段树】Serious Business(CF1648D)

正题 luogu CF1648D 题目大意 有一个 3*n 的矩阵&#xff0c;1,3行没有行走限制&#xff0c;对于第2行&#xff0c;有m个区间&#xff0c;覆盖第 i 个区间有 kik_iki​ 的代价&#xff0c;只有覆盖的位置才能走&#xff0c;让你从 (1,1) 走到 (3,n)&#xff08;只能向下和向右…

P6378-[PA2010]Riddle【2-SAT】

正题 题目链接:https://www.luogu.com.cn/problem/P6378 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;图中有kkk种颜色的点。 要求每种颜色选择一个点作为关键点&#xff0c;满足每条边两边至少有一个关键点 求是否有满足的方案 1≤n,m,k≤1061\leq n,m,k\leq 10^…

后缀数组(讲解)

子串&#xff1a;从原串中选取连续的一段&#xff0c;即子串 空串也是子串 后缀&#xff1a;suf(k)为s(k…n)构成的子串 任何子串都是某个后缀的前缀 最长公共前缀 lcp(suf(i),suf(j)) 问题&#xff1a; 将所有后缀suf(1),suf(2),suf(N)按照字典序从小到大排序 暴力sort N2 …

codeforces1471 D. Strange Definition

D. Strange Definition 大佬题解 由lcm(x,y)xygcd(x,y)lcm(x,y)\frac{xy}{gcd(x,y)}lcm(x,y)gcd(x,y)xy​可知&#xff0c;如果lcm(x,y)gcd(x,y)xygcd2(x,y)\frac{lcm(x,y)}{gcd(x,y)}\frac{xy}{gcd^2(x,y)}gcd(x,y)lcm(x,y)​gcd2(x,y)xy​是完全平方数&#xff0c;那么xyxy…

2018 上海.NET职位围观报告

我一直说我是夏眠动物&#xff0c;如今已经11月份了&#xff0c;差不多也该活过来了&#xff0c;所以我决定写篇文章给各位.NET的支持者们和公司打打气&#xff0c;也算是为社区做点贡献吧。我最近主要干了两件事&#xff1a;让NPOI支持.NET Core&#xff0c;现已发布2.4版本。…

P5437-[XR-2]约定【拉格朗日差值,数学期望】

正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 nnn个点的完全图&#xff0c;连接i,ji,ji,j的边权值为(ij)k(ij)^k(ij)k。随机选出一个生成树&#xff0c;求期望边权和。 1≤n<998244353,1≤k≤1071\leq n<998244353,1\leq k\leq 10^71≤n<99824435…

【模板】分散层叠算法(P6466)

正题 P6466 题目大意 给你 k 个大小为 n 的数组&#xff0c;有q次询问&#xff0c;每次询问回答x在k个数组中的后继的异或和 解题思路 分散层叠模板 code #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll …

后缀数组(后续)

文章目录**后缀数组 Height**两个子串最长公共前缀**求Height数组**比较一个字符串的两个子串的大小关系不同子串的数目出现至少k次的子串的最大长度**总结&#xff1a;**代码&#xff1a;后缀数组 Height 利用后缀数组快速求出2个后缀的lcp长度 lcp:最长公共前缀 lcp(suf(i),…

codeforces1472 G. Moving to the Capital

G. Moving to the Capital 先bfs一边&#xff0c;求出距1号点的最短路用数组d1[]记录&#xff0c;求的过程中如果当前点t遍历到之前遍历过的点j意味着这条边就是能够拉近与1号点距离的边&#xff08;横向边或者后向边&#xff09;那么就用d1[j]更新d2[t]&#xff0c;d2[]表示最…

P3793-由乃救爷爷【分块,ST表】

正题 题目链接:https://www.luogu.com.cn/problem/P3793 题目大意 给出nnn个数字的一个序列mmm次询问区间最大值 保证数据随机 1≤n,m≤21071\leq n,m\leq 2\times 10^71≤n,m≤2107 解题思路 使用STSTST表可以做到O(1)O(1)O(1)询问&#xff0c;但是预处理的时空复杂度都是…

【DP】Mod Mod Mod(CF889E)

正题 CF889E luogu 题目大意 给你 n 个数&#xff0c;让你选择一个X&#xff0c;使得 ∑i1nXmoda1moda2...modai\sum_{i1}^nX\mod a_1\mod a_2...\mod a_i∑i1n​Xmoda1​moda2​...modai​ 最大 解题思路 可以发现必定存在一个 i &#xff0c;使得当前点贡献为 aia_iai​&a…

老张 .NetCore与Vue 框架学习

缘起作为一个.Net攻城狮已经4年有余了&#xff0c;一直不温不火&#xff0c;正好近来项目不是很忙&#xff0c;闲得无聊&#xff0c;搞一搞新技术&#xff0c;一方面是打发无聊的时间&#xff0c;一方面也是督促自己该学习辣&#xff01;身边的大神都转行的转行&#xff0c;加薪…

【平衡规划】Arithmetic Operations(CF1654E)

正题 CF1654E luogu 正题 给你一个正整数序列&#xff0c;你可以让一个位置变成任意整数&#xff0c;问你最少修改多少个数&#xff0c;能使得其成为等差序列 解题思路 考虑根号分治 对于公差小于 n\sqrt{n}n​ 的&#xff0c;直接枚举公差&#xff0c;然后枚举所有点&…

P1251-餐巾计划问题【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P1251 题目大意 NNN天&#xff0c;第iii天需要aia_iai​个餐巾。 每个餐巾价格为ppp&#xff0c;使用完后有两种清洗方法 清洗mmm天&#xff0c;费用为fff清洗nnn天&#xff0c;费用为sss 求满足所有需求的最小花费 1≤N≤…

J. Spy(多重匹配KM算法)

J. Spy 随机打&#xff0c;最后答案乘n&#xff0c;因为我方等概率的遇见敌人&#xff0c;相当于与n个敌人都打一遍&#xff0c;然后贡献累加作为匹配边权 bfs版本的KM #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>…

2018年10月28日宁波dotnet社区活动回顾及下次活动预告

离上次活动&#xff0c;有半年了&#xff0c;汗。之后尽量保证每月一次&#xff0c;以组织为主&#xff0c;多邀请嘉宾来分享。本次活动不足之处人手不足&#xff1a;由于活动组织事项受限于人手&#xff08;目前就我一个&#xff0c;这次活动前后我又应邀给大红鹰学院应届生介…

[JSOI2007]字符加密

题目描述 喜欢钻研问题的JS 同学&#xff0c;最近又迷上了对加密方法的思考。一天&#xff0c;他突然想出了一种他认为是终极的加密办法&#xff1a;把需要加密的信息排成一圈&#xff0c;显然&#xff0c;它们有很多种不同的读法。 例如‘JSOI07’&#xff0c;可以读作&…

【状压DP】滚榜(P7519)

正题 P7519 题目大意 n个队伍&#xff0c;排名先按分数排序再按编号排序&#xff0c;每个队伍有一个初始分数 aia_iai​&#xff0c;和一个附加分数 bib_ibi​ 对于一个合法的 bib_ibi​ 序列&#xff0c;按 bib_ibi​ 大小排序&#xff0c;从小到大把每个 bib_ibi​ 加进对…

P4480-[BJWC2018]餐巾计划问题【三分,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P4480 题目大意 nnn天&#xff0c;第iii天需要aia_iai​个餐巾。 每个餐巾价格为ppp&#xff0c;使用完后有两种清洗方法 清洗m1m_1m1​天&#xff0c;费用为c1c_1c1​清洗m2m_2m2​天&#xff0c;费用为c2c_2c2​ 求满足所…