python123太阳风暴
innum=input()#输入第一行内容
innum=innum.split(' ',2)#将输入内容分割
n=int(innum[0])
s=int(innum[1])
k=int(innum[2])
innum=input()#输入第二行内容
innum=innum.split(' ',n-2)
d=[0 for i in range(n-1)]#初始化一个数组保存各点间距离
d_sum=[0 for i in range(n)]#初始化一个数组保存节点到头的总距离
for i in range(n-1):
d[i]=int(innum[i])
for j in range(i+1):
d_sum[i+1]=d[j]+d_sum[i]
innum=input()#输入第三行
innum=innum.split(' ',n-1)
v=[0 for i in range(n)]#初始化数组保存个点价值
for i in range(n):
v[i]=int(innum[i])
#以下为算法部分
#定义类保存每个方法的数据,包括:价值、护盾数量、节点位置
class weys_to_try:
def __init__(self,worth,s_num,p_num):
self.worth=worth #总价值
self.s_num=s_num #护盾数量
self.p_num=p_num #被保护节点数量
self.prpoints=[0 for _ in range(p_num)] #被保护的节点位置
self.points=[0 for _ in range(s_num)] #节点位置
def getworth(self):
w=0
for i in range(self.p_num):
w+=v[self.prpoints[i]-1]
return w
allweys=[weys_to_try(0,0,0) for _ in range(n)]
endwey=weys_to_try(0,0,0)
for i in range(n):
Awey=weys_to_try(0,1,1)
snum=1
Awey.points[0]=i+1
for j in range(n-i-1):
if d_sum[i+j]-d_sum[Awey.points[-1]-1]<=k:
None
elif snum>=s:
break
else:
snum+=1
Awey.s_num+=1
Awey.points.append(i+j+1)
flag=Awey.points[0]
flag_s=flag
h=flag
while flag!=1:
if k>=d_sum[flag_s-1]-d_sum[flag-1-1]:
h=flag-1
flag-=1
else:
break
flag=Awey.points[-1]
flag_s=flag
l=flag
while flag!=n:
if k>=d_sum[flag]-d_sum[flag_s-1]:
l=flag+1
flag+=1
else:
break
Awey.p_num=l-h+1
Awey.prpoints=[_ for _ in range(h,l+1)]
Awey.worth=Awey.getworth()
allweys[i]=Awey
endwey=allweys[0]
for w in allweys:
if endwey.worth<w.worth:
endwey=w
elif endwey.worth==w.worth and endwey.s_num>w.s_num:
endwey=w
print(endwey.s_num)
for i in range(endwey.s_num-1):
print(endwey.points[i],end=' ')
print(endwey.points[-1])