小美拿到了一个数组,她准备构造一个数组满足: 1. 的每一位都和对应位置不同,即 2. 的所有元素之和都和相同。 3. 的数组均为正整数。 请你告诉小美有多少种构造方式。由于答案过大,请对取模。
区块链毕设网qklbishe.com为您提供问题的解答
小美拿到了一个数组,她准备构造一个数组满足:
1. 的每一位都和对应位置不同,即
2. 的所有元素之和都和相同。
3. 的数组均为正整数。
请你告诉小美有多少种构造方式。由于答案过大,请对取模。
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n=in.nextInt();
List<Integer> list=new ArrayList<>();
int sum=0;
for(int i=0;i<n;i++){
int k=in.nextInt();
list.add(k);
sum+=k;
}
System.out.print(pro(list,0,sum));
}
private static int pro(List<Integer> list,int index,int sum){
int n=list.size();
int[][] dp=new int[n][sum+1];
for(int i=1;i<=sum;i++){//确定最后一行,即最后一位数时的结果,然后往前推dp[index][sum]
if(i!=list.get(n-1)) dp[n-1][i]=1;
}
for(int row=n-2;row>=0;row–){
for(int col=1;col<=sum;col++){
int t=1;
int count=0;
while(col>=n-row&&col-t>=n-row-1){
if(t!=list.get(row)) count=(count+dp[row+1][col-t])%(int)(1e9 + 7);
t++;
}
dp[row][col]=count;
}
}
return dp[index][sum];
}
}
以上就是关于问题小美拿到了一个数组,她准备构造一个数组满足:
1. 的每一位都和对应位置不同,即
2. 的所有元素之和都和相同。
3. 的数组均为正整数。
请你告诉小美有多少种构造方式。由于答案过大,请对取模。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训