问题陈述:
萨钦很喜欢甜食。所以,他去了一个糖果市场。有一排甜蜜的摊位。每个甜点都有不同的甜点。为了省时间,他决定从邻近的摊位买糖果。因此,他可以从他想要的多个摊位购买,但所有这些摊位都需要连续。他还决定从每个摊位购买1公斤糖果。给出每个摊位1公斤糖果的费用。该市场存在一种奇怪的计费规则。该规则如下 - 所有购买的糖果的总成本是所有糖果的成本乘以他最后购买的甜食成本的总和。例如如果他以相同的顺序购买糖果,费用为2,3,4,那么糖果的总费用将为2 * 4 + 3 * 4 + 4 * 4 = 36。现在他想知道购买糖果的所有可能方式的总成本是多少。你能帮助他吗?因为这个数字可能很大,你应该以10 ^ 9 + 7取最终结果的模数
举例
样本测试案例1-
Input
3
1
2
3
Output
53
Explanation
Possible ways of buying sweets are-
a) 1
b) 1 2
c) 2
d) 1 2 3
e) 2 3
f) 3
cost of each of these is following-
a) 1*1= 1
b) 1*2+2*2= 6
c) 2*2= 4
d) 1*3+2*3+3*3= 18
e) 2*3+3*3= 15
f) 3*3= 9
我使用此代码解决了这个问题,但我仍然在比赛中获得0 :(
import sys
import os
def possibleways(input1):
t1 = []
s = 0
big_num = 10**9 + 7
for i in range(len(input1)):
for j in range(i + 1, len(input1) + 1):
l1 = []
for k in range(i, j):
l1.append(input1[k])
t1.append(l1)
# print(t1)
for x in t1:
last_element = x[-1]
# print("last_element", last_element)
s += (sum(x) * last_element) % big_num
# print(s)
return s % big_num
# return ts
ip1_cnt = 0
ip1_cnt = int(input())
ip1_i = 0
ip1 = []
while ip1_i < ip1_cnt:
ip1_item = int(input())
ip1.append(ip1_item)
ip1_i += 1
output = possibleways(ip1)
print(str(output))
请帮我找到我正在做的错误
答案 0 :(得分:0)
据我了解:
假设价格是a,b和c
现在我们假设所有产品的总价格是“x”
这意味着你要找的号码是
“ax + bx + cx”因为这是可能的价格的乘积
等于(a + b + c)x =&gt; X * X
所以如果给你一个数字列表,你只需要总结一下
然后你会得到“x”然后你知道其余的,不是吗?
答案 1 :(得分:0)
如果你从最后一个摊位向后工作,问题就可以简化了。请考虑以下代码:
import itertools
test = [3,1,2,3]
cum_cost = 0
for num_visits in range(1,len(test)+1):
print('Number of Visits: ',num_visits)
for end_stall in test:
print('\tEnd Stall',end_stall)
remaining_stalls = test[:]
remaining_stalls.remove(end_stall)
visits_left = num_visits - 1
stalls_left = len(remaining_stalls)
perms = itertools.permutations(remaining_stalls,visits_left)
perms1, perms2 = itertools.tee(perms)
p = [perm for perm in perms1]
s = sum([sum(perm)+end_stall for perm in perms2])*end_stall
print('\t\tVisits left',visits_left)
print('\t\tStalls left',stalls_left)
print('\t\tpermutations',p)
print('\t\tSum',s,' Running Sum',cum_cost)
cum_cost+=s
print('\n')
print('Grand Total',cum_cost)
通过删除“最后一档”(因为我们正在向后工作),我们找到了参加其他档位的所有可能组合。然后我们可以计算每个成本,并将它们添加到运行总计中。
答案 2 :(得分:0)
int possibleways(int input1_size,int *input1)
{
unsigned int pow_set_size = pow(2, input1_size);
int counter, j;
for(counter = 0; counter < pow_set_size; counter++)
{
for(j = 0; j < set_size; j++)
{
/* Check if jth bit in the counter is set
If set then pront jth element from set */
if(counter & (1<<j))
printf("%d", input1[j]);
}
printf("\n");
}
}
// I wrote this code it showed the output still , I got 0 in exam competition.
答案 3 :(得分:0)
我的代码将解决您的问题,而且不是那么大。 (python ver 3.6.2)
length = int(input())
if (length >=1 and length <= 10^5):
shop = list(map(int, input().strip()))
Sum = 0
flag = len(shop)
while (flag != 0):
for i in range(len(shop),0,-1):
Shop = shop[i-1:]
l= len(Shop)
for _ in Shop:
Sum = Sum + _*Shop[l-1]
shop.pop()
flag = len(shop)
print(Sum)