题目描述
输入描述:
输出描述:
解题思路
动态规划
代码1:
定义一个三维数组,weight[n,a+1,k]
import math
n,k,a,b=[int(x) for x in input().split()]
data=[int(x) for x in input().split()]
weights=[[[0]*k for j in range(a+1)] for i in range(n)]
for i in range(n):
cur_gcd=math.gcd(a,data[i])
weights[i][cur_gcd][0]=1
for i in range(n-1):
for j in range(1,a+1):
if sum(weights[i][j])>0:
for h,w in enumerate(weights[i][j]):
cur1_gcd=math.gcd(a,j*data[i+1])
if w>0:
if h<k-1:
weights[i+1][cur1_gcd][h+1]+=weights[i][j][h]
weights[i+1][j][h]+=weights[i][j][h]
n_count=0
for i in range(b,a+1):
n_count+=weights[-1][i][-1]
# print(weights)
print(n_count)
代码2:
import math
n,k,a,b=[int(x) for x in input().split()]
data=[int(x) for x in input().split()]
yinzi=[i for i in range(1,a+1) if a%i==0]
weights=[[[0]*k for j in range(len(yinzi))] for i in range(n)]
for i in range(n):
cur_gcd=math.gcd(a,data[i])
cur_j=yinzi.index(cur_gcd)
weights[i][cur_j][0]=1
for i in range(n-1):
for j in range(len(yinzi)):
if sum(weights[i][j])>0:
for h,w in enumerate(weights[i][j]):
j_yinzi=yinzi[j]
cur1_gcd=math.gcd(a,j_yinzi*data[i+1])
cur1_j=yinzi.index(cur1_gcd)
if w>0:
if h<k-1:
weights[i+1][cur1_j][h+1]+=weights[i][j][h]
weights[i+1][j][h]+=weights[i][j][h]
n_count=0
for i in range(len(yinzi)):
if yinzi[i]>=b:
n_count+=weights[-1][i][-1]
# print(weights)
print(n_count)