首页 > 其他分享 >[刷题笔记] Luogu P1466 [USACO2.2] 集合 Subset Sums

[刷题笔记] Luogu P1466 [USACO2.2] 集合 Subset Sums

时间:2023-08-02 16:22:46浏览次数:46  
标签:Subset 状态 题面 Luogu P1466 int include 转移 dp

Problem

Description

有一个长度为\(n\)的数组为\(1-n\),求有多少种选择方案使得选择数之和等于序列和的一半

Solution

题面翻译成这样是不是就好做了?

首先,序列和的一半我们可以计算出\(n\times(n+1)\div 2 \div 2\),显然序列和的一半只有是整数才有解,如果不是整数直接输出0即可。

将题面转移成这样,是不是有点dp的性质!子结构之间可以互相转移,考虑dp

先设计状态:\(f_{i,j}\)表示前\(i\)位总和为\(j\)的方案数。状态转移方程:\(f_{i,j}+=f_{i-1,j-i}\)

和01背包同理,容易发现第\(i\)位只是和第\(i-1\)位有关联,所以可以压缩掉这一维状态。

但是压缩后,对于总和我们需要从大到小枚举,若从小到大枚举则和完全背包一样每个数可以被选多次,不符合题意。

本题关键在于将原始题面转换为可以被状态转移的题面,设计状态进行dp。

PS:像这种输出结果只有一位的题目这不就是让你打表送分的吗!!

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#define N 100010
#define int long long
using namespace std;
int n;
int f[N];
signed main()
{
	scanf("%lld",&n);
	int m = n*(n+1)/2;
	if(m%2 != 0) 
	{
		cout<<"0"<<endl;
		return 0;
	}
	m/=2;
	f[0] = 1;
	for(int i=1;i<=n;i++)
	{
		for(int j=m;j>=i;j--) f[j] += f[j-i];
	}
	cout<<f[m]/2<<endl;
	return 0;
}

标签:Subset,状态,题面,Luogu,P1466,int,include,转移,dp
From: https://www.cnblogs.com/SXqwq/p/17601007.html

相关文章

  • 【题解】Luogu[P2296] [NOIP2014 提高组] 寻找道路
    Link很简单的一道图论题。要在一个有向图上找一条\(s\)到\(t\)的最短路,要求这条路径上的所有点都满足:该点的所有出边所连点都能到达终点\(t\)。看上去很乱,我们简单分解一下,先在所有点中找到与终点有路径的点集\(A\)进行标记,再再所有点中找到其所有出边所连点都被打上标......
  • [刷题笔记] Luogu P2340 [USACO03FALL] Cow Exhibition G
    ProblemSolution乍看可能没有思路。我们注意到本题是牵扯到一头奶牛选or不选的问题,非常自然地想到01背包。接下来我们就尝试将本题背景转换成01背包问题。我们可以将智商转换成容量,情商转换成价值。(当然反过来也可)然后就可以套用01背包板子了:\[f_{i,j}=min(f_{i-1,j},f_{i-1......
  • [刷题笔记] Luogu P1877 音量调节
    ProblemDescription共\(n\)次操作,每次操作有一个值\(a_i\),同时给定一个初始值\(start\),对于每次操作,可以将值\(k\)加或减\(a_i\)(\(k\)初始=\(start\)),求经过这\(n\)操作后\(k\)的最大值。Solution其实这是一个01背包的变形。这和01背包有何关系呢?回顾一下经典01背包:有......
  • 【题解】Luogu[P2420] 让我们异或吧
    Link看到是树,又多组询问,立马想到类似的求和问题,异或不好理解,我们想求和怎么做,维护\(dis_i\)表示\(i\)节点到根的权值和,那么对于\(u,v\)两点路径上的权值和就是\(dis_u+dis_v-2\timesdis_{\mathrm{lca}(u,v)}\),这是很经典的问题了。事实上刚才的求和我们可以转化一下,我们......
  • luogu P4069 [SDOI2016] 游戏 题解【李超树+树剖】
    目录题目描述解题思路code题目描述P4069[SDOI2016]游戏一棵树,树上有\(n\)个节点,最初每个节点上有\(1\)个数字:\(123456789123456789\)。有两种操作:\(\centerdot\)选择\(s,t\)两个节点,将路径上的每一个点都变多(\(1\)个变\(2\)个)数字:\(a\timesdis+b\),其中\(dis\)表示该节点......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • 【题解】Luogu[P4711] 「化学」相对分子质量
    Link一道简单的模拟题,评绿可能有点高了。因为没有括号嵌套,难度瞬间降了一个档次,我们直接对着化学式扫一遍即可。若扫到左括号,说明接下来都是在括号内的,我们标记一下。若扫到大写字母,说明出现了一个新的元素,那么我们就看后面是否有下标,若有则类似于快读的方式直接处理后面的数......
  • luogu P9474 [yLOI2022] 长安幻世绘 详细题解
    原题:P9474[yLOI2022]长安幻世绘看到很多大佬的题解直接讲了做法,本蒟蒻看得不是很懂,调了很久才把这题做出来,于是写了这篇比较详细的题解谈一下我做这题从头到尾的思路,希望对各位有帮助qwq。思路我们首先思考这样一个问题,如果已经知道最终答案对应的最大值和最小值,又不知道题......
  • luogu P3203 [HNOI2010] 弹飞绵羊 题解
    题目传送门:P3203[HNOI2010]弹飞绵羊题意\(n\)个数,满足\(i<a_i≤N+1\),\(m\)次下面两种操作修改一个数\(a_i\)从\(x\)开始跳,\(x=a_x\),几次能够跳出序列\(n\leq2*10^5,m<10^5\)分析数据范围比较大,单纯搜索模拟肯定会T,那么考虑每次让他跳一段就......
  • ARC125F Tree Degree Subset Sum
    感觉挺不错的一道题,不过课上pb好像没有讲。显然树的具体形态对题目影响不大,那么我们知道\(\sum\limits_{i=1}^nd_i=2n-2\)即可扔掉树的条件。即:给定\(n\)个\(d_i\),和为\(2n-2\),求\((x,y)\)满足\(0\lex\len\)且\(\existsS\subseteq\{1,2,\cdotsn\},|S|=x,\sum......