当前位置: 首页 > news >正文

AtCoder Beginner Contest 216(F)

F - Max Sum Counting

链接: F - Max Sum Counting

题意

两个 大小为 nnn 的序列 aiaiaibibibi,任意选取一些下标 iii,求 max⁡(ai)>=∑bi\max(ai) >= \sum{bi}max(ai)>=bi的方案数。

解析

首先考虑状态 一是和, 二是最大值, 但这样我们发现需要三重循环,在 n=5000n = 5000n=5000 的情况下是不能接受的复杂度,于是我们想到按 aiaiai 排序后,我们只计算 ∑bi\sum{bi}bi 的方案,将所有满足条件的方案再计入答案,就变成一个普通的背包求方案数了。

对于要按 aiaiai 排序的证明:
因为我们没有多开一维来记录 max⁡(ai)\max(ai)max(ai) 最大值, 所以对于每一种 bibibi 和为 sumsumsum 他的状态集合可能有许多不同的 max(ai)max(ai)max(ai)
假设和为 sumsumsummax(ai)=ajmax(ai) = ajmax(ai)=ajmaxai=akmax{ai} = akmaxai=ak 两种可能,若是不按 aiaiai 排序 会导致不知道 aj,akaj, akaj,ak 那种状态可以转移

假设 sum=10sum = 10sum=10aj=100aj = 100aj=100ak=10ak = 10ak=10 当前的 ai=10ai = 10ai=10bi=10bi = 10bi=10 那么只能从 ajajaj 转移 因为只有这种才保证 max⁡(ai)>∑bi\max(ai) > \sum{bi}max(ai)>bi 但已经把 aj,akaj, akaj,ak 的状态整合在一起了不能分开。
若是按 aiaiai 排序,新来的 aiaiai 一定是目前的最大值, 一定比 ajajajakakak 都大 于是一个状态包含的所有情况都能转移。

代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5010, mod = 998244353, MAX = 5000;
struct node{int ai, bi;bool operator < (const node &A)const{return ai < A.ai;}
}s[N];
int f[N];//bi之和价值为i的方案数
int main(){int n;cin >> n;for(int i = 1; i <= n; i ++) cin >> s[i].ai;for(int i = 1; i <= n; i ++) cin >> s[i].bi;sort(s + 1, s + 1 + n);f[0] = 1;int ans = 0;for(int i = 1; i <= n; i ++){for(int j = MAX; j >= s[i].bi; j --){f[j] = (f[j] + f[j - s[i].bi]) % mod;if(j <= s[i].ai) ans = (ans + f[j - s[i].bi]) % mod;}}cout << ans;return 0;
}
http://www.lryc.cn/news/37945.html

相关文章:

  • 每天学一点之Stream流相关操作
  • MatCap模拟光照效果实现
  • 二十一、PG管理
  • SAPUI5开发01_01-Installing Eclipse
  • Qt之高仿QQ系统设置界面
  • JVM概览:内存空间与数据存储
  • 固态存储设备固件升级方案
  • Python交通标志识别基于卷积神经网络的保姆级教程(Tensorflow)
  • 基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)
  • Python进阶-----高阶函数zip() 函数
  • win10打印机拒绝访问解决方法
  • 深度学习训练营之数据增强
  • Tomcat安装及启动
  • 【专项训练】排序算法
  • Android压测测试事件行为参数对照表
  • 【观察】亚信科技:“飞轮效应”背后的数智化创新“延长线”
  • QT编程从入门到精通之十四:“第五章:Qt GUI应用程序设计”之“5.1 UI文件设计与运行机制”之“5.1.1 项目文件组成”
  • (二分)730. 机器人跳跃问题
  • vue3使用nextTick
  • 传统图像处理之颜色特征
  • GPS问题调试—MobileLog中有关GPS关键LOG的释义
  • 【企业管理】你真的理解向下管理吗?
  • Centos7 硬盘挂载流程
  • 认识vite_vue3 初始化项目到打包
  • 【Go】cron时间格式
  • leetcode 55. 跳跃游戏
  • Linux:文件流指针 与 文件描述符
  • 基于FPGA实现正弦插值算法
  • JavaWeb_会话技术
  • Reactor响应式流的核心机制——背压机制