首页 > 其他分享 >Robotruck UVA - 1169

Robotruck UVA - 1169

时间:2023-04-17 21:44:40浏览次数:39  
标签:Robotruck int 1169 cas hh abs 垃圾 UVA dis

有n个垃圾,第i个垃圾的坐标为(xi,yi),重量为wi。

有一个机器人,要按照编号从小到大的顺序捡起所有垃圾并扔进垃圾桶(垃圾桶在原点(0,0))。

机器人可以捡起几个垃圾以后一起扔掉,但任何时候其手中的垃圾总重量不能超过最大载重C。两点间的行走距离为曼哈顿距离(即横坐标之差的绝对值加上纵坐标之差的绝对值)。

求出机器人行走的最短总路程(一开始,机器人在(0,0)处)

 

 f[ i ] =max( f[ j ] + D0(i)-D0(j+1) + sumD(i) -sumD(j+1) )   sumw[i]-sumw[j+1] <=C

 

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std; 
 const int N=1e5+2;
 int C,n,s[N],f[N],dis[N],x[N],y[N],sw[N];
 
 int F(int i){
 	return f[i]-s[i+1]+dis[i+1];
 } 
 int hh,tt,q[N]; 
 
 void solve(){
 	cin>>C>>n;
 	int i,z;
 	 for(i=1;i<=n;i++){
 	 	 cin>>x[i]>>y[i]>>z;
 	 	 dis[i]=abs(x[i])+abs(y[i]);
 	 	 s[i]=s[i-1]+abs(x[i]-x[i-1])+abs(y[i]-y[i-1]);
 	 	 sw[i]=sw[i-1]+z; 
	  }
	hh=1,tt=0; q[++tt]=0;
	
	for(i=1;i<=n;i++){
		while(hh<=tt&&sw[i]-sw[q[hh]]>C) hh++;
		f[i]=F(q[hh])+s[i]+dis[i];
		
		while(hh<=tt&&F(i)<=F(q[tt])) tt--;
		q[++tt]=i ;
	}
	cout<<f[n]<<endl;
 }
 signed main(){
 	int cas;
 	cin>>cas; 
 	while(cas--){
 		solve();
 		if(cas) cout<<endl;
	 }
 
}
 
 

 

标签:Robotruck,int,1169,cas,hh,abs,垃圾,UVA,dis
From: https://www.cnblogs.com/towboa/p/17327618.html

相关文章

  • Add Again UVA - 11076
     defineS,itissumofallpossiblepermutationsofagivensetofdigits.Forexample,ifthedigitsare<123>,thensixpossiblepermutationsare<123>,<132>,<213>,<231>,<312>,<321>andthesumofthemis......
  • The Super Powers UVA - 11752
     求1~2^64区间里,有多少合法数X合法数:X=a^b,至少存在2个不同的a #include<iostream>#include<algorithm>#include<vector>usingnamespacestd;constintN=65536+3;intb[int(1e6)];__int128_tMAX=1;voidinit(){ inti,j; b[0]=b[1]=1; fo......
  • LCM Cardinality UVA - 10892
    给出n,求有多少对(a,b)(a<b),满足LCM(a,b)=n 暴力求所有因数#include<iostream>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e4+20;#defineintlonglongconstintinf=1e9;voidsov(intn){ vector<int>v;......
  • Again Prime? No Time. UVA - 10780
    给定m,n,求最大的k使得m^k∣n! 分解质因数   #include<iostream>#include<cstring>#include<sstream>usingnamespacestd;constintN=1e4+20;constintinf=1e9;intn,m,a[N],b[N];intprime[N],tot,vis[N];voidinit(inttop){ for(......
  • Uva--679 Dropping Balls(二叉树的编号)
    记录23:282023-4-16https://onlinejudge.org/external/6/679.pdfreference:《算法竞赛入门经典第二版》例题6-6二叉树,这里是完全二叉树,使用模拟的方式应该会TLE(虽然我用模拟的方式也TLE了,但不是这个原因,下面会提到原因)不用模拟的方式,转换思路,使用递归的方式去思考。这里......
  • UVA1392 DNA Regions
     https://www.luogu.com.cn/problem/UVA1392给定两个长度为n的字符串A和B,满足A和B都只由大写字母A、C、G、T组成。求一个长度最长的闭区间[L,R],满足对于i∈[L,R], 有不超过p%的i满足Ai≠Bi ......
  • Unique Snowflakes uva11572
    找最长的,没有相同元素的区间 双指针#include<iostream>#include<set>usingnamespacestd;constintN=1e6+2;intn,a[N];voidsolve(){ intx=1,y=1,ans=0; set<int>st; while(y<=n){ while(y<=n&&!st.count(a[y]))s......
  • UVA1451
     二分平均值x,每个数减去x,   找区间S[r]-S[l]>=0,r-l>=m#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;constintN=1e5+5;#defineinf1e9intn,m,a[N];doubles[N];intchk(doublemd,intok=0){ i......
  • Sumsets UVA - 10125
     一个集合中需要找到a,b,c,d,使得a+b+c=d 枚举a,b,计算a+b,存在map里再枚举d,c,计算d-c是否存在d-c==a+b #include<iostream>#include<map>#include<algorithm>#include<vector>usingnamespacestd;constintN=1e3+2;//a+b==d-c#definepiipair<......
  • UVA1382 Distant Galaxy
    给出平面上的n个点,找一个矩形,使得边界上包含的点尽可能地多。 先维护前缀和col[i][j],row[i][j],表示i行前j个的和。。枚举上下边界,右边界,考虑维护左边届 #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=200;struct......