整体概述

  • 难度:1600 →\rightarrow 2200 →\rightarrow 2600

P6005 [USACO20JAN] Time is Mooney G

  • 标签:DP

  • 前置知识:链式前向星

  • 难度:绿 1600

题目描述:

image

输入格式:

image

输出格式:

image

样例输入:

3 3 1
0 10 20
1 2
2 3
3 1

样例输出:

24

解题思路:

  • 发现数据范围很小,考虑可否 DPDPDP

  • 定义 dpi,jdp_{i,j}dpi,j 表示第 iii 天到达 jjj 城市的最大收益,则单次更新可以暴力枚举每个节点,更新其相邻的节点,复杂度只为 O(M)O(M)O(M)

    并且发现数据给定 mi≤1000m_i\le 1000mi1000,则 TTT 不可能超过 100010001000 否则 c∗T∗Tc*T*TcTT 一定大于总收益。所以总复杂度为 O(1000⋅M)O(1000·M)O(1000M)

完整代码

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = 1e3+5,M = 2e3+5,INF = 0x3f3f3f3f;
int n,m,c,val[N],ha[N],idx;
struct Edge{int from,to,ne;}edge[M];
inline void ins(int u,int v){edge[++idx] = {u,v,ha[u]}, ha[u] = idx;
}
int dp[N][N];
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n >> m >> c;for(int i=1;i<=n;i++) cin >> val[i];for(int i=1,u,v;i<=m;i++){cin >> u >> v;ins(u,v);}for(int i=0;i<N;i++) for(int j=0;j<N;j++) dp[i][j] = -INF;dp[0][1] = 0;int ans = 0;for(int t=0;t<=1000;t++){for(int u=1;u<=n;u++){if(dp[t][u]==-INF) continue;for(int i=ha[u];i;i=edge[i].ne){int v = edge[i].to;dp[t+1][v] = max(dp[t+1][v],dp[t][u]+val[v]);}}ans = max(ans,dp[t][1] - c*t*t);}cout << ans;return 0;
}

P10391 [蓝桥杯 2024 省 A] 零食采购

  • 标签:重链剖分

  • 前置知识:线段树、状态压缩

  • 难度:蓝 2200

题目描述:

image

输入格式:

image

image

输出格式:

image

样例输入:

4 2
1 2 3 1
1 2
1 3
2 4
4 3
1 4

样例输出:

3
2

解题思路:

  • 题目很简单,给出一棵树,每个节点有一个权值 1≤c≤201\le c\le 201c20,大量查询每次询问两个节点 uuuvvv 在树上简单路径上经过的所有店的权值类型个数。

  • 我们发现 ccc 很小,可以压缩到 intintint 的每一个位上,那么原问题转化为询问树上简单路径上的权值的 或和,那么就是裸的重链剖分的板子题了,线段树只需要支持单点修改,区间查 或和 即可。

完整代码

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = 1e5+5;
int n,q,ha[N],idx,a[N];
struct Edge{int to,ne;}edge[N<<1];
inline void ins(int u,int v){edge[++idx]={v,ha[u]}, ha[u] = idx;
}
int fa[N],siz[N],son[N],dep[N];
inline void dfs1(int u,int par){fa[u] = par, dep[u] = dep[par]+1;siz[u] = 1;for(int i=ha[u];i;i=edge[i].ne){int v = edge[i].to;if(v == par) continue;dfs1(v,u), siz[u] += siz[v];if(siz[son[u]] < siz[v]) son[u] = v;}
}
int dfn[N],back[N],Time,top[N];
inline void dfs2(int u,int Top){top[u] = Top;dfn[u] = ++Time, back[Time] = u;if(!son[u]) return;dfs2(son[u],Top);for(int i=ha[u];i;i=edge[i].ne){int v = edge[i].to;if(v != fa[u] && v != son[u]) dfs2(v,v);}
}
#define ls ((u)<<1)
#define rs ((u)<<1|1)
#define mid (((l)+(r))>>1)
int tr[N<<2];
inline void up(int u){tr[u] = tr[ls] | tr[rs];
}
inline void build(int l,int r,int u){if(l == r){tr[u] = 1<<a[back[l]];return ;}build(l,mid,ls), build(mid+1,r,rs);up(u);
}
inline int queryOR(int x,int y,int l=1,int r=n,int u=1){if(x <= l && r <= y) return tr[u];int ans = 0;if(x <= mid) ans |= queryOR(x,y,l,mid,ls);if(y > mid) ans |= queryOR(x,y,mid+1,r,rs);return ans;
}
inline int query(int u,int v){int ans = 0;while(top[u] != top[v]){if(dep[top[u]] < dep[top[v]]) swap(u,v);ans |= queryOR(dfn[top[u]],dfn[u]);u = fa[top[u]];}if(dep[u] < dep[v]) swap(u,v);ans |= queryOR(dfn[v],dfn[u]);return ans;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n >> q;for(int i=1;i<=n;i++) cin >> a[i];for(int i=1,u,v;i<n;i++){cin >> u >> v;ins(u,v), ins(v,u);}dfs1(1,0);dfs2(1,1);build(1,n,1);while(q--){ int u,v; cin >> u >> v;int res = query(u,v), cnt = 0;while(res) res &= res-1, cnt += 1;cout << cnt << '\n';} return 0;
}

P7519 [省选联考 2021 A/B 卷] 滚榜

  • 标签:状压DP

  • 前置知识:差分数组

  • 难度:紫 2600

题目描述:

image

输入格式:

image

image

输出格式:

image

样例输入:

3 6
1 2 1
6 50
4 7 9 3 0 3
11 300
6 8 8 12 0 11 6 1 0 15 5

样例输出:

5
96
30140983

解题思路:

  • 发现题目的数据范围很小,求总排名方案书,肯定为状压 DPDPDP

  • 状压 DPDPDP 肯定有一维 O(2n)O(2^n)O(2n) 表示已经公布了哪几个人,本题的 bib_ibi 要求单调不降,肯定需要一维 O(n)O(n)O(n) 记录上公布的人,需要一维 O(m)O(m)O(m) 记录已经用了多少道题。

    接着考虑如何转移,对于每个状态 sss,枚举最后一个人是 iii,暴力枚举下一个人是 jjj,假设 iii 要变成第一所需的过题数为 ddd,那么由于 bib_ibi 需要单调不降,后续所有的人都需要过 ddd 到题,所以转移需要消耗 cnt∗dcnt*dcntd 道题,其中 cntcntcnt 为还没有被公布的人数。

  • 最后暴力统计所有答案即可,总复杂度 $O(2n·n2·m)。

  • 我们可以预处理一个数组 sis_{i}si 表示 iii 超过所有人所需的最小的 bib_ibi,再预处理一个数组 cnticnt_icnti 表示状态为 iii 时还没有公布的人数为 cnticnt_icnti,那么便可以很方便地转移了。

完整代码

#include<bits/stdc++.h>
using namespace std;
const int N = 13, M = 505;
int n,m,up,dp[1<<N][N][M],a[N],d[N][N],s[N],cnt[1<<N];
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n >> m; up = 1<<n;for(int i=0;i<n;i++) cin >> a[i];for(int i=0;i<n;i++) for(int j=0;j<n;j++){if(j < i) d[i][j] = max(0,a[j]-a[i]+1);else d[i][j] = max(0,a[j]-a[i]);}for(int i=0;i<n;i++) for(int j=0;j<n;j++) s[i] = max(s[i],d[i][j]);cnt[0] = n;for(int i=1;i<up;i++) cnt[i] = cnt[i>>1] - (i&1);for(int i=0;i<n;i++) if(n*s[i] <= m) dp[1<<i][i][n*s[i]] = 1;for(int s=0;s<up;s++){for(int i=0;i<n;i++) if((s>>i)&1){for(int j=0;j<n;j++) if(!((s>>j)&1)){for(int t=d[j][i]*cnt[s];t<=m;t++){dp[s|(1<<j)][j][t] += dp[s][i][t-d[j][i]*cnt[s]];}}}}long long ans = 0;for(int i=0;i<n;i++) for(int j=1;j<=m;j++) ans += dp[up-1][i][j];cout << ans;return 0;
}

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

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

相关文章

【Ubuntu22.04】repo安装方法

背景 repo是Google开发的用于基于git管理Android版本库的一个工具&#xff0c;管理多个Git仓库的工具&#xff0c;它可以帮助您在一个代码库中管理多个Git仓库的代码。其在鸿蒙操作系统中大量使用。下面我们就介绍repo在wsl中的安装部署。 安装方法 使用中国科技大学资源 脚本i…

Vue3的definePros和defineEmits

在 Vue 3 中&#xff0c;defineProps 和 defineEmits 是组合式 API 中用于定义组件的 props 和 事件 的方法&#xff0c;提供了一种更简洁和明确的方式来管理组件的输入和输出。它们属于 Composition API 的一部分&#xff0c;在 Vue 2 中通常使用 props 和 $emit 来实现。1. d…

【华为机试】122. 买卖股票的最佳时机 II

文章目录122. 买卖股票的最佳时机 II描述示例 1示例 2示例 3提示解题思路核心观察关键洞察算法实现方法1&#xff1a;贪心算法&#xff08;推荐&#xff09;方法2&#xff1a;动态规划方法3&#xff1a;动态规划&#xff08;空间优化&#xff09;方法4&#xff1a;波峰波谷法算…

Spring MVC @RequestParam注解全解析

RequestParam 注解详解 RequestParam 是 Spring MVC 中最常用的注解之一&#xff0c;用于从 HTTP 请求中提取查询参数&#xff08;Query String&#xff09;或表单数据。它主要处理 application/x-www-form-urlencoded 类型的请求&#xff08;如 GET 请求或 POST 表单提交&…

从零掌握XML与DTD实体:原理、XXE漏洞攻防

本文仅用于技术研究&#xff0c;禁止用于非法用途。 Author:枷锁 文章目录一、XML基础1. 什么是XML&#xff1f;2. XML语法规则3. 数据类型二、DTD1. 认识DTD2. 声明DTD3. DTD实体4. 如何防御XXE攻击&#xff1f;5. 总结一、XML基础 1. 什么是XML&#xff1f; XML &#xff1…

.NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!

.NET 8 Release Candidate 1 (RC1)发布&#xff1a;ASP.NET Core重大改进来袭&#xff01; 近日&#xff0c;.NET 8 Release Candidate 1 (RC1)正式发布&#xff0c;这是在今年晚些时候计划发布的最终 .NET 8 版本之前的两个候选版本中的第一个。此版本包含了大部分计划中的功…

Jenkins pipeline 部署docker通用模板

Jenkinsfile: Docker的NETWORK_NAME不要使用bridge默认网络&#xff0c;要使用自定义的网络如test默认 bridge 网络&#xff1a;容器间不能用名字互相访问&#xff0c;只能用 IP。自定义网络&#xff1a;容器间可以用名字互相访问&#xff0c;Docker 自动做了 DNS 解析。pipeli…

【每日算法】专题十五_BFS 解决 FloodFill 算法

1. 算法思想 Flood Fill 问题的核心需求 给定一个二维网格&#xff08;如像素矩阵&#xff09;、一个起始坐标 (x, y) 和目标颜色 newColor&#xff0c;要求&#xff1a; 将起始点 (x, y) 的颜色替换为 newColor。递归地将所有与起始点相邻&#xff08;上下左右&#xff09; …

ESLint 完整功能介绍和完整使用示例演示

以下是ESLint的完整功能介绍和完整使用示例演示&#xff1a; ESLint 完整功能介绍 一、核心功能静态代码分析&#xff1a; 通过解析JavaScript/TypeScript代码为抽象语法树&#xff08;AST&#xff09;&#xff0c;识别语法错误、潜在问题&#xff08;如未定义变量、未使用变量…

解决问题七大步骤

发现问题后寻找解决方案的流程可以细化为 7个核心步骤&#xff0c;每个步骤包含具体措施、信息源和关键技巧&#xff0c;形成“从自查到验证、从独立解决到寻求帮助”的完整闭环。以下是完善后的流程&#xff1a; 一、明确问题与初步自查&#xff08;前提&#xff1a;减少无效搜…

思维链(CoT)技术全景:原理、实现与前沿应用深度解析

一、核心概念与原理 定义与起源 CoT 是一种引导大语言模型&#xff08;LLM&#xff09;显式生成中间推理步骤的技术&#xff0c;通过模拟人类逐步解决问题的过程&#xff0c;提升复杂任务&#xff08;如数学证明、多步逻辑推理&#xff09;的准确性。该概念由 Google Brain 团…

实验-华为综合

华为综合实验 一 实验拓扑二 实验配置交换机2 vlan batch 10 20 int e0/0/2 port link-type access port default vlan 10 int e0/0/1 port link-type access port default vlan 20 int e0/0/3 port link-type trunk port trunk allow-pass vlan alltelnet交换机3 链路类型配置…

Matlab打开慢、加载慢的解决办法

安装完毕后直接打开会非常慢&#xff0c;而且打开了之后还得加载很久才能运行 解决办法如下&#xff1a; 1.找到路径“D:\Program Files\Polyspace\R2020a\licenses”&#xff08;我是把matlab安装在D盘了&#xff0c;如果是其他盘修改路径即可&#xff09;&#xff0c;该路径记…

混沌趋势指标原理及交易展示

1. 引言在金融市场交易中&#xff0c;尤其是加密货币合约交易&#xff0c;趋势跟踪是最主流的策略之一。然而&#xff0c;传统趋势指标如均线、MACD等存在明显的滞后性&#xff0c;往往在趋势确立后才发出信号&#xff0c;导致交易者错失最佳入场时机。更糟糕的是&#xff0c;市…

Java面试宝典:Maven

一、Maven的本质与核心价值 项目管理革命 POM驱动:通过pom.xml文件定义项目结构、依赖、构建规则,实现标准化管理()。示例配置: <dependencies> <dependency> <groupId>org.springframework

可靠消息最终一致性分布式事务解决方案

之前文章写过主流的一些 分布式事务的解决方案&#xff0c;但其实工作中很少有一些高并发的业务中去使用这些方案&#xff0c;因为对于高并发的场景来说&#xff0c;引入这些方案的性能损耗太大&#xff0c;且对系统事务侵入性太强影响系统稳定性。 所以在高并发的业务中&…

ISIS基础

拓扑计算方式 模型 支持的网络 支持的地址OSPF SPF TCP/IP IP网络 IPv4地址ISIS SPF OSI CLNP网络 NSAP地址集成ISIS SPF TCP/IP IP网络 NSAP地址&#xff0c;但可以支持IPv4地址12. …

基于ASP.NET+SQL Server实现(Web)排球赛事网站

排球赛事网的设计与实现摘要随着近几年来计算机技术、网络技术及相应软件技术的迅猛发展&#xff0c;人们的生活已越来越离不开计算机了&#xff0c;而且总是要花费很多时间在它上面。一直以来&#xff0c;排球作为一项大众喜爱的运动&#xff0c;得到广泛传播。随着各项排球赛…

【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果&#xff0c;输出该树的前序遍历结果。 输入格式: 第一行给出正整数 n (≤30)&#xff0c;是树中结点的个数。随后两行&#xff0c;每行给出…

Java HashMap高频面试题深度解析

在 Java 面试中&#xff0c;HashMap 是必问的核心知识点&#xff0c;以下是高频问题和深度解析框架&#xff0c;助你系统性掌握&#xff1a;一、基础概念HashMap 的本质是什么&#xff1f; 基于哈希表的 Map 接口实现&#xff0c;存储键值对&#xff08;Key-Value&#xff09;非…