当前位置: 首页 > wzjs >正文

网站域名代办线上推广产品

网站域名代办,线上推广产品,tinkphp5网站开发,爱站seo工具包题目 小明有n个可选运动&#xff0c;每个运动有对应卡路里&#xff0c;想选出其中k个运动且卡路里和为t。k&#xff0c;t&#xff0c;n都是给定的。求出可行解数量 输入描述 第一行输入n t k 第二行输入 每个运动的卡路里 按照空格进行分割 备注 0<n<10 t>0&#xff…

题目

小明有n个可选运动,每个运动有对应卡路里,想选出其中k个运动且卡路里和为t。k,t,n都是给定的。求出可行解数量
输入描述
第一行输入n t k
第二行输入 每个运动的卡路里 按照空格进行分割
备注
0<n<10
t>0,0<k<=n
每个运动量的卡路里>0
输出描述
求出可行解数量

示例1:

输入

4 3 2
1 1 2 3

输出

2

说明
可行解为2,选取{0,2},{1,2}两种方式。

思路一(暴力解法)

可以使用回溯法来枚举所有可能的k个运动的组合,并统计满足条件的组合数量。

算法过程

  1. 输入处理:读取输入的n、t、k和卡路里数组。

  2. 回溯搜索:从第一个运动开始,尝试选择或不选择当前运动,递归搜索所有可能的组合。

  3. 剪枝条件

    • 如果已选运动数量超过k,终止搜索。

    • 如果剩余运动不足以达到k个,终止搜索。

    • 如果当前卡路里之和超过t,终止搜索。

  4. 终止条件:当已选运动数量为k且卡路里之和等于t时,计数加1。

  5. 该算法的时间复杂度为 O (C (n, k)),其中 C (n, k) 表示组合数。由于 n 的最大值为 10,组合数的最大值为 252,因此算法在给定约束条件下是高效的。

参考代码

function solution() {const [n, t, k] = readline().split(" ").map(Number);const calories = readline().split(" ").map(Number);let count = 0;function backtrack(start, currentSum, currentSize) {if (currentSize === k) {if (currentSum === t) {count++;}return;}if (currentSize > k || currentSum > t) {return;}for (let i = start; i < n; i++) {backtrack(i + 1, currentSum + calories[i], currentSize + 1);}}backtrack(0, 0, 0);console.log(count);
}const cases = [`4 3 2
1 1 2 3`,
];
let caseIndex = 0;
let lineIndex = 0;const readline = (function () {let lines = [];return function () {if (lineIndex === 0) {lines = cases[caseIndex].trim().split("\n").map((line) => line.trim());}return lines[lineIndex++];};
})();cases.forEach((_, i) => {caseIndex = i;lineIndex = 0;solution();
});

思路二(动态规划)

       题意可以简化为从 n 个物品中选取 k 个恰好装满容量为 t 的背包的方案总数。这是一个典型的背包问题,属于恰好装满的 0-1 背包计数问题。其特点是:

  • 每个物品只能选或不选(0-1 性质)。
  • 必须恰好装满容量为 t 的背包。
  • 目标是计算满足条件的方案总数,而非最大价值。

算法过程

  1. 状态定义dp[j][s] 表示选择 j 个运动,卡路里总和为 s 的组合数目。

  2. 初始化dp[0][0] = 1,表示不选任何运动且总和为 0 的情况只有一种。

  3. 状态转移

    • 对于每个运动,逆序遍历 j 从 k 到 1

    • 对于每个 j,逆序遍历 s 从 t 到当前运动的卡路里值

    • 更新 dp[j][s] 的值,加上 dp[j-1][s-cal](即选择当前运动的情况)

  4. 结果:最终结果存储在 dp[k][t] 中,表示选择 k 个运动且总和为 t 的组合数目。

复杂度分析

  • 时间复杂度:仍然是 O (n * k * t),与三维数组版本相同

  • 空间复杂度:优化为 O (k * t)

参考代码

function solution() {const [_, t, k] = readline().split(" ").map(Number);const calories = readline().split(" ").map(Number);// 创建二维DP数组并初始化为0const dp = Array.from({ length: k+1 }, () => Array(t+1).fill(0));// 初始化:不选任何物品,重量为0,方案数为1dp[0][0] = 1;// 处理每个物品for (const cal of calories) {// 逆序遍历j和s,避免覆盖需要的旧状态for (let j = k; j >= 1; j--) {for (let s = t; s >= cal; s--) {// 状态转移:选当前物品dp[j][s] += dp[j-1][s - cal];}}}// 结果:选k个物品,总重量为t的方案数console.log(dp[k][t]);
}const cases = [`4 3 2
1 1 2 3`,
];
let caseIndex = 0;
let lineIndex = 0;const readline = (function () {let lines = [];return function () {if (lineIndex === 0) {lines = cases[caseIndex].trim().split("\n").map((line) => line.trim());}return lines[lineIndex++];};
})();cases.forEach((_, i) => {caseIndex = i;lineIndex = 0;solution();
});

http://www.dtcms.com/wzjs/216917.html

相关文章:

  • 哈尔滨网站建设多少钱seo百度站长工具
  • 学生作业做网站需要湖人今日排名最新
  • 网站建设公司的市场营销方案模板下载免费制作自己的网站
  • 导航类网站怎么做排名网络营销推广技巧
  • 网站做很久了百度没收录百度广告
  • 如何查看网站开发单位seo网站排名优化教程
  • 怎么做彩票网站搜索引擎营销的简称
  • 闵行做网站的公司广告投放代理商加盟
  • 设计iphone手机网站百度地图人工客服电话
  • 商务网站策划书搜索引擎网站优化和推广方案
  • 做学校网站需要备案么个人博客登录首页
  • 找外地的做网站排名第一的手机清理软件
  • 霸州网站优化站长之家域名解析
  • 网站的二维码怎么做情感营销经典案例
  • 网站开发有什么好的介绍上海公司网站seo
  • 住房城乡住房和城乡建设部网站优化师培训机构
  • 检测网站安全百度搜索优化怎么做
  • 哪家公司的网好湖南网站seo
  • 网站抓取压力高seo推广排名
  • 福建省建设质量安全协会网站seo培训多少钱
  • 传奇手游发布网seo排名赚app最新版本
  • 如何做网页游戏网站百度引擎的搜索方式是什么
  • 周口网站建设 网站制作 网络推广西安网站维护
  • 长春网站建设首选网诚传媒郑州网站推广效果
  • 宁波市城乡建设委员会网站浏览器打开是2345网址导航
  • 小程序商城推广杭州关键词优化外包
  • 网站建设和网页建设的区别2345网址导航主页
  • 网站群建设进展情况汇报西安网站搭建
  • 网站备案信息是什么网站关键词排名优化方法
  • 写网站论文怎么做长沙百度推广排名优化