牛客练习赛79E-小G的数学难题【dp,单调队列】

正题

题目链接:https://ac.nowcoder.com/acm/contest/11169/E


题目大意

给出nnn个三元组(ai,bi,ci)(a_i,b_i,c_i)(ai,bi,ci)

要求选出一个集合SSS,要求
(∑i∈Sai)≤P,(∑i∈Sbi)≥P\left(\sum_{i\in S}a_i\right)\leq P,\left(\sum_{i\in S}b_i\right)\geq P(iSai)P,(iSbi)P
且最小化∑i∈Sci\sum_{i\in S}c_iiSci

1≤T≤5,1≤n≤1000,1≤P≤10000,1≤ai≤bi≤2×106,1≤ci≤2×1061\leq T\leq 5,1\leq n\leq 1000,1\leq P\leq 10000,1\leq a_i\leq b_i\leq 2\times 10^6,1\leq c_i\leq 2\times 10^61T5,1n1000,1P10000,1aibi2×106,1ci2×106


解题思路

暴力的思路是设fi,l,rf_{i,l,r}fi,l,r表示到第iii个,aia_iai的和为lllbib_ibi的和为rrr时的最小值。

但是这个O(nP2)O(nP^2)O(nP2)的显然不行,发现有一个ai≤bia_i\leq b_iaibi的性质考虑怎么使用。

其实还要一个相关的性质就是两个的限制的PPP是相等的,虽然看起来比较废话但确实是有用的。

一个十分巧妙的dpdpdp是设fi,jf_{i,j}fi,j表示aia_iai的和≤j\leq jjbib_ibi的和≥j\geq jj。虽然这样的限制不完全,但是这样确实可以统计到最小答案且不会统计到更小答案。

转移就是
fi,j=min{fi−1,j,fi−1,p+ci}(p∈[j−bi,j−ai])f_{i,j}=min\{f_{i-1,j},f_{i-1,p}+c_i\}(p\in[j-b_i,j-a_i])fi,j=min{fi1,j,fi1,p+ci}(p[jbi,jai])

这样每一层用单调队列维护就可以了

时间复杂度O(TnP)O(TnP)O(TnP)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1100;
ll T,n,P,a[N],b[N],c[N],f[N][N*10],q[N*10];
signed main()
{scanf("%lld",&T);while(T--){scanf("%lld%lld",&n,&P);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);memset(f,0x3f,sizeof(f));f[0][0]=0;for(ll i=1;i<=n;i++){ll tail=0,head=1,z=-1;for(ll j=0;j<=P;j++){f[i][j]=f[i-1][j];ll l=j-b[i],r=j-a[i];while(z<r){z++;if(f[i-1][z]>=1e18)continue;while(head<=tail&&f[i-1][q[tail]]>f[i-1][z])tail--;q[++tail]=z;}while(head<=tail&&q[head]<l)head++;if(head<=tail)f[i][j]=min(f[i][j],f[i-1][q[head]]+c[i]);}}if(f[n][P]>=1e18)printf("IMPOSSIBLE!!!\n");else printf("%lld\n",f[n][P]); }return 0;
}

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

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

相关文章

手把手教你写DI_2_小白徒手撸构造函数注入

在上一节&#xff1a;手把手教你写DI_1_DI框架有什么&#xff1f;我们已经知道我们要撸哪些东西了那么我们开始动工吧&#xff0c;这里呢&#xff0c;我们找小白同学来表演下小白同学 &#xff1a;我们先定义一下我们的广告招聘纸有什么&#xff1a;好&#xff0c;我们实现两种…

E. Pattern Matching(题意理解+拓扑排序)

E. Pattern Matching 首先p[mtj]p[mt_j]p[mtj​]必须能够匹配所给字符sjs_jsj​&#xff0c;然后把所有能够匹配的sjs_jsj​的其他模板串也找出来&#xff0c;这些必须放在p[mtj]p[mt_j]p[mtj​]的后面&#xff0c;典型拓扑排序&#xff0c;连边然后排序即可 #define IO ios:…

Sum

链接&#xff1a;https://ac.nowcoder.com/acm/problem/14269 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld 题目描述 考虑维护一个这样的问题&#xff1a…

NOI.AC#2266-Bacteria【根号分治,倍增】

正题 题目链接:http://noi.ac/problem/2266 题目大意 给出nnn个点的一棵树&#xff0c;有一些边上有中转站&#xff08;边长度为222&#xff0c;中间有一个中转站&#xff09;&#xff0c;否则就是边长为111。 mmm次询问一个东西从xxx出发走到yyy&#xff0c;每隔kkk步中转站…

服务器win2008 R2 x64 部署ASP.net core到IIS 并解决 HTTP Error 502.5 的问题

1、发布网站 &#xff1b;2、安装 vc_redist.x64 (Visual C Redistributable for Visual Studio 2015) 新装的系统没装的补丁&#xff0c;装过略过&#xff1b;3、安装WindowsHosting &#xff1a;如&#xff1a; dotnet-hosting-2.1.3-win &#xff1b;4、安装.Net Core SDK&…

codeforces1271 D. Portals(dp or 带悔贪心)

D. Portals 由于每个点可以选择前面的某些点存在重复选择的情况&#xff0c;考虑除去重复选择的可能。 贪心&#xff1a;对于每一个城堡&#xff0c;我们都尽可能在最晚的时间控制&#xff0c;也就是在最后一个能控制它的点考虑是否控制。 于是考虑设计dp 状态表示&#xf…

P3337-[ZJOI2013]防守战线【单纯形】

正题 题目链接:https://www.luogu.com.cn/problem/P3337 题目大意 nnn个地方可以建立塔也可以不建立塔&#xff0c;第iii个位置建立需要消耗CiC_iCi​元 mmm个限制要求在某个区间内的塔的数量超过DiD_iDi​ 1≤n≤1000,1≤m≤100001\leq n\leq 1000,1\leq m\leq 100001≤n≤10…

Data Structure Problem

试题链接 题目描述 题意&#xff1a; 有两个序列&#xff0c; 操作1是将a序列的第x位改成y 操作2是将b序列的第x位改成y 操作3是找到一个cx&#xff0c;满足递推式c00&#xff0c;ci max(ci-1bi&#xff0c;ai) 题解&#xff1a; 官方题解 说实话我没大看懂。。。 题是我同…

定制Ocelot来满足需求

这篇文章&#xff0c;我们将从Ocelot的中间件源码分析&#xff0c;目前Ocelot已经实现那些功能&#xff0c;还有那些功能在我们实际项目中暂时还未实现&#xff0c;如果我们要使用这些功能&#xff0c;应该如何改造等方面来说明。一、Ocelot源码解读在使用一个组件前&#xff0…

codeforces1151 E. Number of Components(计数)

E. Number of Components 方法一&#xff1a;考虑每个点的贡献&#xff0c;认为一个联通块里让编号最大的点产生贡献 那么&#xff0c;对于一个点 iii&#xff0c;如果对答案产生贡献&#xff0c;一定要点 iii 存在&#xff0c;而点 i1i 1i1 不存在。 #define IO ios::sync_…

P2490-[SDOI2011]黑白棋【博弈论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P2490 题目大意 一个长度为nnn的棋盘上放下kkk个棋子。 第一个要是白色&#xff0c;下一个要是黑色&#xff0c;在下一个是白色以此类推。 先手操控白&#xff0c;后手操控黑。白色只能往右&#xff0c;黑色只能往左。每次…

【.NET Core项目实战-统一认证平台】第一章 功能及架构分析

从本文开始&#xff0c;我们正式进入项目研发阶段&#xff0c;首先我们分析下统一认证平台应该具备哪些功能性需求和非功能性需求&#xff0c;在梳理完这些需求后&#xff0c;设计好系统采用的架构来满足已有的需求和未来的扩展应用。1 功能性需求统一认证平台应该具备以下基本…

Shift and Reverse

题目链接 题意&#xff1a; 一个序列a1&#xff0c;a2&#xff0c;a3…an 选择一个i&#xff0c;然后将序列改成ai,ai-1,…a1,an,an-1,…ai1 可以进行无数次这样的操作 问&#xff1a;最多有多少不同的序列产生&#xff1f;&#xff08;答案mod1e97&#xff09; 题解&#xf…

UOJ#33-[UR #2]树上GCD【长链剖分,根号分治】

正题 题目链接:https://uoj.ac/problem/33 题目大意 给出nnn个点的一棵树 定义f(x,y)gcd(dis(x,lca),dis(y,lca))f(x,y)gcd(\ dis(x,lca),dis(y,lca)\ )f(x,y)gcd( dis(x,lca),dis(y,lca) )。 对于每个iii求有多少对f(x,y)i(x<y)f(x,y)i(x<y)f(x,y)i(x<y) 1≤n≤1…

codeforces1167 E. Range Deleting(双指针)

E. Range Deleting 首先不难知道如果f(l,r)f(l,r)f(l,r)满足题意&#xff0c;那么f(l,r1),f(l,r2),…,f(l,x)f(l,r1),f(l,r2),\dots,f(l,x)f(l,r1),f(l,r2),…,f(l,x)都满足题意。 因而对于每一个左端点lll&#xff0c;需要找到最小的一个右端点rrr 单调性&#xff1a;对于每…

Redis基本使用及百亿数据量中的使用技巧分享

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9941208.html作者&#xff1a;大石头时间&#xff1a;2018-11-10 晚上20&#xff1a;00地点&#xff1a;钉钉群&#xff08;组织代码BKMV7685&#xff09;QQ群&#xff1a;1600800内容&#xff1…

Subsequence Pair

题目 题目描述 题意&#xff1a; X和Y两个字符串&#xff0c;两个字符串各取子序列X1和Y1&#xff0c;问X1<Y1的情况下X1和Y1的长度和最长是多少&#xff1f; 比如例子&#xff1a; zazxwabzczazazd abcaa 第一个字符串选取子序列为azxwabzczazazd 第二个为bcaa azxwabzc…

NOI.AC#2144-子串【SAM,倍增】

正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串sss和一个序列aaa。将字符串sss的所有本质不同子串降序排序后&#xff0c;求有多少个区间[l,r][l,r][l,r]使得子串sl,rs_{l,r}sl,r​排名等于al∼ra_{l\sim r}al∼r​的和。 1≤n≤21051\leq n\leq 2\times…

codeforces1481 E. Sorting Books(贪心+dp)

大佬题解1 大佬题解2 E. Sorting Books 首先每本书都移动&#xff0c;移动次数是n能够满足题意。如果某些书不用移动&#xff0c;说明把隔开他们中间的书全部抽走后自然成组。 对于每本书全部移动的情况&#xff0c;显然我们可以选择一种颜色的书全部不案&#xff0c;移动别…

【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)

本篇将介绍如何扩展Ocelot中间件实现自定义网关&#xff0c;并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能&#xff0c;内容也是从实际设计出发来编写我们自己的中间件&#xff0c;本文内容涵盖设计思想内容和代码内容&#xff0c;我希望园友们最好跟着我这个文章…