第七题:《砝码称重》

题目大意

解题思路

思路1:用闫氏dp分析法:

注意dp[i-1] [j+w[i]] ,这里j+w[i]会产生越界,需要将砝码重量上限100000改成200000;

for (int i =1; i <= n; i++) {for (int j = 0; j <= s; j++) {//有一个等于j,那么就砝码组成的质量就可以等于jdp[i][j] = dp[i-1][j] || dp[i-1][Math.abs(j-w[i])] || dp[i-1][j+w[i]];}}

思路2:dfs暴力搜索

dfs记住:找重复,找变化,找边界 来写dfs的函数。

预定义一个count数组,来存放0-100000的所有数据。每得到一个大于0的重量sum,就令count[sum] = 1。

最后打印count数组中为1的数,即可。

但是结果会超时,只能拿一半的分数。

private static void dfs(int x,int[] w,int sum,int[] count) {//下一个使用砝码的下标,砝码数组,当前用到砝码的总重量if (x == w.length) {if (sum > 0) {count[sum] = 1;}return;}dfs(x+1,w,sum+w[x],count);//加上第x个砝码dfs(x+1,w,sum,count);//不加第x个砝码dfs(x+1,w,sum-w[x],count);//减去第x个砝码}

完整代码

代码1:用闫氏dp分析法:

import java.util.*;
//背包
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = 100;int n = scanner.nextInt();//砝码总数int[] w = new int[N+1]; //砝码大小int M = 200000;int s = 0;//砝码总重量for (int i = 1; i <= n; i++) {//N个砝码的大小w[i] = scanner.nextInt();s += w[i];}boolean[][] dp = new boolean[N+1][M+1];//前i个砝码重量是否为jdp[0][0] = true;//DP算法for (int i =1; i <= n; i++) {for (int j = 0; j <= s; j++) {//有一个等于j,那么就砝码组成的质量就可以等于jdp[i][j] = dp[i-1][j] || dp[i-1][Math.abs(j-w[i])] || dp[i-1][j+w[i]];}}//用count计数int count = 0;for (int j =1 ; j <=s; j++) {if (dp[n][j]) {count++;}}System.out.println(count);}
}

代码2:dfs暴力搜索

import java.util.*;
//dfs暴力
public class Main{static int N = 100;//最大砝码数static int M = 100000;//最大重量static int[] count = new int[M+1];public static void main(String[] args) {Scanner scanner  = new Scanner(System.in);int n = scanner.nextInt();//取的砝码数int[] w = new int[n];for (int i = 0; i < n; i++) {w[i] = scanner.nextInt();//砝码的大小}//DFSdfs(0,w,0);//遍历count数组int s = 0;for (int i = 0; i < count.length; i++) {if (count[i] == 1) {s++;}}//打印结果System.out.println(s);}private static void dfs(int x,int[] w,int sum) {//下一个使用砝码的下标,砝码数组,当前用到砝码的总重量// TODO Auto-generated method stubif (x == w.length) {if (sum > 0) {count[sum] = 1;}return;}dfs(x+1,w,sum+w[x]);//加上第x个砝码dfs(x+1,w,sum);//不加第x个砝码dfs(x+1,w,sum-w[x]);//减去第x个砝码}
}

第12届蓝桥杯 第七题:《砝码称重》的两种解法dfs和dp算法相关推荐

  1. 第12届蓝桥杯 第三题:《卡片》

    第三题:<卡片> 题目大意 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 解题思路 首先建立一个map映射,将0–9 每个卡片各有2021个存入map: Has ...

  2. 第12届蓝桥杯 第一题:《直线》

    2021年第12届蓝桥杯竞赛 第一题:<直线> 题目大意 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 在平面直角坐标系中,两点可以确定一条直线. 给定平面上 ...

  3. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  4. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  5. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...

  6. 第12届蓝桥杯国赛真题剖析-2021年5月29日Scratch编程初中级组

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第128讲. 第12届蓝桥杯Scratch国赛真题,这 ...

  7. 女巫的魔法-第12届蓝桥杯Scratch省赛3真题第2题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第44讲. 第12届蓝桥杯青少年组省赛分两次进行,这是2021年4月24日举行的第二次省赛考 ...

  8. 植树节种树-第12届蓝桥杯Scratch选拔赛真题精选

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第87讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...

  9. 求逆序数-第12届蓝桥杯Scratch省赛3真题第3题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第43讲. 第12届蓝桥杯青少年组省赛分两次进行,这是2021年4月24日举行的第二次省赛考 ...

  10. 绘制同心圆-第12届蓝桥杯Scratch省赛1真题第3题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第53讲. 第12届蓝桥杯青少年组省赛分两次进行,这是2020年10月19日举行的第一次省赛 ...

最新文章

  1. 使用Python,OpenCV在视频中进行实时条形码检测
  2. 爱奇艺火爆的背后,个性化推荐排序是如何配合的?
  3. 放弃OpenStack?恐怕还不到时候
  4. 实验二十二 SCVMM中的SQL Server配置文件
  5. 11-机器学习开发流程--初识
  6. Sublime Text 设置在标签页中打开文件
  7. Linux服务器配置秘钥对连接
  8. Java1.8接口方法都是抽象_抽象类和接口的区别以及jdk1.8之后接口里面可以实现方法...
  9. 在Oracle中添加用户登录名称
  10. 雕虫晓技(十) Android超简单气泡效果
  11. 如何使用extern在源文件之间共享变量?
  12. 2021-08-22 过滤器实现登录权限拦截
  13. python填空题及答案知乎_zhihu-python
  14. 频率域滤波去除周期性噪声
  15. informix的安装步骤
  16. 使用arcgis修改行政区划图边界
  17. 中国微型电动汽车市场趋势报告、技术动态创新及市场预测
  18. python 统计检验_常用统计检验的Python实现(附完整代码)
  19. 机器学习中的矩阵向量求导(五) 矩阵对矩阵的求导
  20. 实现一个B站弹幕不挡人物的效果

热门文章

  1. Openlayers GPS(度分秒)和经纬度坐标相互转换
  2. 如何在WPS里添加字体?
  3. 对称与非对称加密算法
  4. 计算机电缆和屏蔽线的区别,屏蔽线
  5. 银联支付接口申请流程-傲付宝
  6. Raptor码(一):2007RFC5053标准编解码学习
  7. android 声音不想从蓝牙手机中出来,Android蓝牙音频两个问题
  8. KEIL4文件无法正常使用
  9. windows超级工具AlantopTool
  10. Pthread线程基础学习