首页 > 其他分享 >Game Bundles 题解

Game Bundles 题解

时间:2023-10-19 22:35:01浏览次数:40  
标签:题解 30 Bundles 60 Game 子集

题目链接

Game Bundles

分析

很神奇的一道题目
先想想如何计算一个集合和为60的子集个数
可以想到通过 \(DP\) 求解:
记 \(f[i][j]\) 为前 \(i\) 个数字,和为 \(j\) 的子集个数

\(f[i][j]+=f[i-1][j-a[i]]\)
\(f[i][a[i]]++\)
可以倒叙枚举 \(j\) 滚掉 \(i\) 这一维
代码如下

void sol(){
	for(int i=1;i<=n;i++){
		for(int j=60;j>=a[i]+1;j--) f[j]+=f[j-a[i]];
		f[a[i]]++;
	}
}

易发现,对于和为 \(60\) 的子集,其中值大于 &30& 的数最多有一个
也就是说,若在原集合中加入一个大于 \(30\) 的数 \(a\) , 则 \(f[60]+=f[60-a]\)

然后开始乱搞,
先随机一堆小于 \(30\) 的数,使其 \(f[60]\) 接近但不超过 \(m\)
然后将 \(f[1]\) ~ \(f[29]\) 从大到小排序,贪心地从大到小选择,即加入 \(60-i\)

标签:题解,30,Bundles,60,Game,子集
From: https://www.cnblogs.com/Idtwtei/p/17775841.html

相关文章

  • P9745 「KDOI-06-S」树上异或 题解
    原题挺好的树形dp,正好dp不太熟练,练习一下赛时只想到了暴力和\(X\leq7\)的链的部分分,过于naive不说了先考虑链的情况,既然是二进制考虑按位拆分。设\(g_{i,j,0/1}\)表示以\(i\)为根,从\(i\)点连通块的疑惑和第\(j\)位为\(0/1\),除去连通块部分的积的和。然后设......
  • P3119 [USACO15JAN] Grass Cownoisseur G 题解
    分析大概是强连通分量里面最水的一道紫题,不过细节挺多的,做题的时候给蒟蒻震惊到了。题目要求是从\(1\)走到某个点,然后再走回\(1\)号点,中途可逆行一次,问最多能经过几个点。有一个明显的思路是存两个图,一个正图一个反图,正图是为了求\(1\)到各个点的距离,反图是为了求各个点......
  • LuoguCF362B Petya and Staircases 题解
    分析简单排序题。首先Petya可以通过跨过一个台阶和两个台阶保证不经过脏台阶,但是不可以通过跨过三个台阶来保证不经过脏台阶,所以只要看有没有连续的三个脏台阶即可。同时,如果第一个台阶和最后一个台阶至少一个是脏台阶那么就不可以达成。AcceptedCode/*CodeByManipula*/......
  • CF424C的题解
    简单题。CF评分才*1600。可以直接先把\(Q\)拆成两部分。\[\begin{aligned}\largea&=\oplus^n_{i=1}p_i\\\largeb&=\oplus^n_{i=1}\oplus^n_{j=1}\\\(i\bmodj)\\\largeQ&=a\oplusb\end{aligned}\]\(a\)很好算,我们看一下\(b\)具体要怎么算。把\(b\)......
  • CF580B的题解
    见到有单调性、有限制的区间问题,很自然地就会想到用尺取去做。先按工资升序排序,然后套上尺取就行了。不会尺取的可以根据这道题去学。时间复杂度\(O(n\logn)\)。#include<cstdio>#include<algorithm>#definelllonglongusingnamespacestd;constintN=1e5+10;intn......
  • ARC166B题解
    发现还没有和我一样的做法。觉得B比A好想的多。令\(A_i\)为\(a_i\)变成\(A\)的倍数最少次数,\(B_i,C_i,AB_i,AC_i,BC_i,ABC_i\)同理。那么我们就有\(A_i=(A-A\bmod{a_i})\bmodA\),其他同理。这一大坨东西显然都能在\(O(n)\)的时间复杂度内算出来。剩下的就很好......
  • [题解]CF1881G Anya and the Mysterious String
    思路发现如果一个字符串中有长度大于等于\(2\)回文子串,必定有长度为\(2\)的回文子串或长度为\(3\)的回文子串,并且形如:aa和aba。所以考虑用线段树这两种情况。维护一段区间的最左、次左、最右、次右的元素,同时用两个标记变量\(f_1,f_2\)分别表示这个区间中是否出现形如......
  • [AGC020F] Arcs on a Circle 题解
    ArcsonaCircle首先,一个非常自然的想法是尝试断环成链。怎么断呢?我们发现,选择最长线段的起点处截断是个非常好的选择,因为不可能有一个线段完全覆盖它。这之后,一个紧接着的想法就是DP。假如把描述中的全部“实点”改成“整点”的话,那么这题是比较trivial的,可以通过随便状压......
  • 洛谷 P4749 [CERC2017] Kitchen Knobs 题解
    KitchenKnobs首先,一个trivial的想法是,因为每个旋钮如果上面的数字并非全部相同则其必有唯一最优位置,故直接扔掉那些全部相同的旋钮,对于剩余的求出其最优位置。明显此位置是一\(0\sim6\)的数。因为是区间同时旋转,所以转成数之后就是区间加同一个数。一个经典套路是差分。这......
  • [ABC207F] Tree Patrolling 题解
    [ABC207F]TreePatrolling弱智DP题,设\(f(i,j,0/1/2)\)表示在点\(i\),子树中有\(j\)个点被覆盖,且\(i\)点自身状态是未被覆盖/被自身覆盖/被某个儿子覆盖,然后树上背包更新就行了。代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmo......