首页 > 其他分享 >acwing 298 围栏

acwing 298 围栏

时间:2023-03-04 13:11:33浏览次数:45  
标签:木板 int tt pos 粉刷 围栏 298 include acwing

有 n块木板从左到右排成一行,有m M

个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。

第ii个木匠要么不粉刷,要么粉刷包含木板 pos[ i]  的,长度不超过 c[i] 的连续的一段木板,每粉刷一块可以得到 Y[i] 的报酬。

不同工匠的pos[i] 不同。

如何安排能使工匠们获得的总报酬最多

 

 f[i ][ j ]= max( f[i-1][j] ,f[i][j-1]), 

 f[i][j]= max( f[i-1][k] + (j-k) * Y[i] )       pos[i]<=j && j-c[i] <=k

 

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
 const int N=16e3+3,M=102;
 int n,m,f[N][N];
 int hh,tt,q[N];
 
 struct T{
 	int c,L,p;
 	bool operator<(T &u)const{
 		return p<u.p;
	 }
 }a[N];
 int func(int i,int k){
 	return f[i-1][k]-k*a[i].c;
 }
 void solve(){
 	int i,j;
 	
 	for(i=1;i<=n;i++){
 		hh=1,tt=0;
 		q[++tt]=0;
 		
 		for(j=0;j<=m;j++){
	  		f[i][j]=max(f[i-1][j],f[i][j-1]);

	  		if(j>=a[i].p){
	  			while(hh<=tt&&q[hh]<j-a[i].L) hh++;
	  			if(hh<=tt) 
				  f[i][j]=max(f[i][j],func(i,q[hh])+a[i].c*j);
			  
			  	while(hh<=tt&&func(i,j)>func(i,q[tt])) tt--;
				q[++tt]=j;	
			
			  }
			

	    } 
	 }
	 cout<<f[n][m]<<endl;
 }
 int main(){
 	int i,j;
 	cin>>m>>n;
 	for(i=1;i<=n;i++) cin>>a[i].L>>a[i].c>>a[i].p;
 	sort(a+1,a+1+n);
 	solve();
 }
 
 

 

标签:木板,int,tt,pos,粉刷,围栏,298,include,acwing
From: https://www.cnblogs.com/towboa/p/17178125.html

相关文章

  • acwing 297 赤壁之战
    给定一个长度为n的序列,求它有多少个长度为m的严格递增子序列。  f[i][j]+=f[i-1][k](a[k]<a[i],k<i)  优化:维护前缀和,根据a[k]<a[i] ,以a[]为下......
  • acwing 330. 估算
    给定一个长度为n的整数数组A,你需要创建另一个长度n的整数数组B,数组B被分为K个连续的部分,并且如果X和y在同一个部分,则B[i]=B[j]b[x]=b[y]如果要求数组B满足su......
  • AcWing 1562. 微博转发
    微博被称为中文版的Twitter。微博上的用户既可能有很多关注者,也可能关注很多其他用户。因此,形成了一种基于这些关注关系的社交网络。当用户在微博上发布帖子时,他/她的......
  • 2023.3.1AcWing蓝桥杯集训·每日一题
    今日的知识点为\(BFS\)(广度优先搜素)。\(BFS\)简要介绍下\(BFS\)算法。首先,\(BFS\)算法适用于边权为\(1\)的图论问题。\(BFS\)算法的解题思路也比较固定。确定......
  • 2023.2.27AcWing蓝桥杯集训·每日一题
    复习的知识点为哈希。AcWing840.模拟散列表题目描述维护一个集合,支持如下几种操作:Ix,插入一个数\(x\);Qx,询问数\(x\)是否在集合中出现过;现在要进行\(N\)次操......
  • 2023.2.28AcWing蓝桥杯集训·每日一题
    今日复习的知识点为Tire树(字典树)。字典树可用于快速存储和查找字符串,并且\(0-1\)字典树也可以用于解决异或问题。AcWing3485.最大异或和题目描述给定一个非负整数数......
  • AcWing 1249. 亲戚
    或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的......
  • AcWing 2058. 笨拙的手指
    1.题目描述每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字14转换为二进制数,那么正确的结果应为1110,但她可能会写下01......
  • Acwing 1238. 日志统计(双指针)
    https://www.acwing.com/problem/content/1240/1238.日志统计输入样例:71020101010101019110031003输出样例:13首先注意数据范围,0-1e5的数据范围......
  • acwing 281 硬币
    给定n种硬币,其中第i种硬币的面值为Ai,共有piCi个。从中选出若干个硬币,把面值相加,若结果为sS,则称“面值sS能被拼成”。求1∼M1~M之间能被拼成的面值有多少个。#i......