3098. 求出所有子序列的能量和
题目链接:3098. 求出所有子序列的能量和
代码如下:
//参考链接:https://leetcode.cn/problems/find-the-sum-of-subsequence-powers/solutions/2852864/qiu-chu-suo-you-zi-xu-lie-de-neng-liang-y4rjd
class Solution
{
public:
int sumOfPowers(vector<int>& nums, int k)
{
unordered_map<long long,int> um;
sort(nums.begin(),nums.end());
auto dfs=[&](auto&& dfs,int i,int j,int k,int mi)->int
{
if(i>=nums.size())
{
return k==0?mi:0;
}
if(nums.size()-i<k)
{
return 0;
}
long long key=(1LL*mi)<<18|(i<<12)|(j<<6)|k;
if(um.contains(key))
{
return um[key];
}
long long res=dfs(dfs,i+1,j,k,mi);
if(j==nums.size())
{
res+=dfs(dfs,i+1,i,k-1,mi);
}
else
{
res+=dfs(dfs,i+1,i,k-1,min(mi,nums[i]-nums[j]));
}
res%=mod;
um[key]=res;
return um[key];
};
return dfs(dfs,0,nums.size(),k,INT_MAX);
}
private:
static constexpr int mod=1e9+7;
};