思路: 首先将数组a按照从小到大的顺序排序。 然后使用动态规划来求解。 定义一个dp数组,dp[i]表示以第i个元素结尾的子数组满足条件的删除方案数。 初始化dp数组,dp[0] = 1。 从第一个元素开始遍历数组a,对于每个元素a[i],找到前面所有满足条件的元素a[j],如果a[i]是a[j]的倍数或者a[j]是a[i]的倍数,则可以将a[i]加入到以a[j]结尾的子数组中,即dp[i] += dp[j]。 更新答案ans,即ans += dp[i]。 最后将答案ans对(10的九次方+7)取模,即ans %= 1000000007。 输出答案ans。

代码如下:

import java.util.*;

public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int k = scanner.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = scanner.nextInt(); } Arrays.sort(a); int[] dp = new int[n]; dp[0] = 1; int ans = 0; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (a[i] % a[j] == 0 || a[j] % a[i] == 0) { dp[i] += dp[j]; dp[i] %= 1000000007; } } ans += dp[i]; ans %= 1000000007; } System.out.println(ans); }

使用java完成编译在一个main方法中完成。小美有一个数组她希望删除k个元素使得剩余的元素两两之间互为倍数关系你能告诉小美有多少种删除方案吗?由于答案过大请对10的九次方+7取模输入描述:第一行输入两个整数nk表示数组长度删除元素的数量第二行输入n个整数表示数组a保证给定数组中不存在相等元素输出描述:输出一个整数表示答案

原文地址: http://www.cveoy.top/t/topic/iWeg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录