中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

洋洋點建站鄭州網(wǎng)

洋洋點建站,鄭州網(wǎng),湘潭seo優(yōu)化首選,wordpress 多語言插件哪個好題目 MELON有一堆精美的雨花石(數(shù)量為n&#xff0c;重量各異)&#xff0c;準(zhǔn)備送給S和W。MELON希望送給倆人的雨花石重星一致&#xff0c;請你設(shè)計一個程序幫MELON確認(rèn)是否能將雨花石平均分配。 輸入描述 第1行輸入為雨花石個數(shù):n&#xff0c;0<n <31. 第2行輸入為空格分…

題目

MELON有一堆精美的雨花石(數(shù)量為n,重量各異),準(zhǔn)備送給S和W。MELON希望送給倆人的雨花石重星一致,請你設(shè)計一個程序幫MELON確認(rèn)是否能將雨花石平均分配。
輸入描述
第1行輸入為雨花石個數(shù):n,0<n <31.
第2行輸入為空格分割的各雨花石重量: m[0] m[1 ]… m[n - 1], 0<m[k]<1001不需要考慮異常輸入的情況。
輸出描述
如果可以均分,從當(dāng)前雨花石中最少拿出幾塊,可以使兩堆的重量相等:
如果不能均分,則輸出-1。
示例1:
輸入
4
1 1 2 2
輸出
2
說明
輸入第一行代表共4顆雨花石,第二行代表4顆雨花石重量分別為1、1、2、2。均分時只能分別為1,2,需要拿出重星為1和2的兩塊雨花石,所以輸出2。
示例2:
輸入
10
1 1 1 1 1 9 8 3 7 10
輸出
3
說明
輸入第一行代表共10顆雨花石,第二行代表4顆雨花石重量分別為1、1、1、1、1、9、8、3、7、10。均分時可以1,1,1,1,1,9,7和10,8,3,也可以1,1,1,1,9.8和10,7,3,1,或者其他均分方式,但第一種只需要拿出重量為10.8,3的3塊雨花石,第二種需要拿出4塊,所以輸出3(塊數(shù)最少)。

思路

兩個方案:

排列組合

排列組合思路參照模板:【JAVA-排列組合】一個套路速解排列組合題

針對本題而言,簡要分析如下:
首先計算雨花石的重量總和sum,sum不能被2整除,直接返回-1。能被2整除,那么我們至少需要拿出多少塊雨花石,使其重量和target=sum/2。
要求最少數(shù)量,先拿重量較大的雨花石,所以可以將輸入nums降序排列,剪枝分析如下:

  1. 雨花石重量可能存在重復(fù),注意同層相同剪枝
  2. 如果某個組合的雨花石重量在加入下一個雨花石之前,已經(jīng)不小于target或者組合個數(shù)已經(jīng)不小于之前解的個數(shù),直接剪枝

最后注意,因為要求的res為最小值,初始值設(shè)置的Integer.MAX_VALUE ,如果沒有找到合適的組合,res還是等于Integer.MAX_VALUE,那么最后需要返回-1.

動態(tài)規(guī)劃

定義:

dp[i][j]的含義為:在前i個雨花石選擇,使其重量和等于j,需要的最少雨花石個數(shù)。

初始化:

dp[i][0],要使目標(biāo)和等于0,那么選0個即可,所以dp[i][0]=0,其中i的范圍為:0~nums.length-1
dp[0][j],從前0個元素選(即只有nums[0]可選,目標(biāo)和就是nums[0]),使其累加和為j(j的范圍為0~target),如果j=nums[0],那么dp[0][j]=1,否則給其一個初始值。具體初始值給多少? 比如nums為:2 3 4 5,dp[0][2]=1。dp[0][3]不可能滿足(只選2,不可能使其和等于3),可以將其結(jié)果設(shè)置為一個比較大的值(因為最后取的最小值,如果存在一個滿足條件的值,兩相比較就能得到最小結(jié)果)。這里我設(shè)置為nums.length。

遞推關(guān)系:
對于dp[i][j](i>0,j>0),只有兩種情況,當(dāng)前值選和當(dāng)前值不選

當(dāng)前值選:dp[i][j]=dp[i-1][j-nums[i]]+1
當(dāng)前值不選: dp[i][j]=dp[i-1][j]
結(jié)果中兩者取其小即可。同時需要注意,如果當(dāng)前值比目標(biāo)j還大,那肯定走不選的分支
根據(jù)初始化和遞推關(guān)系,最后求得dp[nums.length-1][target],如果其值等于nums.length(即初始化的值),說明不存在這樣的組合,直接返回-1。

題解

排列組合

package hwod;import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;public class YuhuaStone {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}System.out.println(yuHuaStone(nums));}private static int res = Integer.MAX_VALUE;private static int yuHuaStone(int[] nums) {int sum = Arrays.stream(nums).sum();if (sum % 2 != 0) return -1;int target = sum / 2;int[] used = new int[nums.length];LinkedList<Integer> path = new LinkedList<>();Arrays.sort(nums);dfs(nums, nums.length - 1, path, used, target);return res == Integer.MAX_VALUE ? -1 : res;}private static void dfs(int[] nums, int start, LinkedList<Integer> path, int[] used, int target) {if (target == 0) {res = Math.min(res, path.size());return;}for (int i = start; i >= 0; i--) {if (target <= 0 || path.size() >= res) break;if (i < nums.length - 1 && nums[i + 1] == nums[i] && used[i + 1] == 0) continue;path.addLast(nums[i]);used[i] = 1;dfs(nums, i - 1, path, used, target - nums[i]);path.removeLast();used[i] = 0;}}
}

動態(tài)規(guī)劃

package hwod;import java.util.Arrays;
import java.util.LinkedList;
import java.util.Scanner;public class YuhuaStone {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();}System.out.println(yuHuaStone(nums));}private static int yuHuaStone(int[] nums) {int sum = Arrays.stream(nums).sum();if (sum % 2 != 0) return -1;int target = sum / 2;int size = nums.length;int[][] dp = new int[size][target + 1];for (int j = 0; j < target + 1; j++) {if (j == nums[0]) dp[0][j] = 1;else dp[0][j] = size;}for (int i = 1; i < size; i++) {for (int j = 1; j <= target; j++) {if (nums[i] > j) dp[i][j] = dp[i - 1][j];else dp[i][j] = Math.min(dp[i - 1][j], 1 + dp[i - 1][j - nums[i]]);}}int res = dp[size - 1][target];return res == size ? -1 : res;}
}

用例

補充輸出-1的用例

用例一

6
2 5 5 6 7 10

用例二

3
2 3 3

推薦

如果你對本系列的其他題目感興趣,可以參考華為OD機試真題及題解(JAVA),查看當(dāng)前專欄更新的所有題目。

http://www.risenshineclean.com/news/12135.html

相關(guān)文章:

  • 北京微信網(wǎng)站建設(shè)公司大連企業(yè)網(wǎng)站建站模板
  • 品牌查詢網(wǎng)站seo關(guān)鍵詞排名優(yōu)化報價
  • 做b網(wǎng)站怎么快速優(yōu)化網(wǎng)站
  • 軟件行業(yè) 網(wǎng)站建設(shè) 模塊搜索引擎快速優(yōu)化排名
  • 成品網(wǎng)站 修改首頁做網(wǎng)絡(luò)推廣可以通過哪些渠道推廣
  • 怎么看一個網(wǎng)站做沒做競價app推廣地推接單網(wǎng)
  • 網(wǎng)站優(yōu)化設(shè)計方案鄭州seo線上推廣技術(shù)
  • 石家莊做網(wǎng)站最好的公司百度小說風(fēng)云榜排名完結(jié)
  • 網(wǎng)站標(biāo)題權(quán)重個人網(wǎng)站網(wǎng)址
  • 河北石家莊網(wǎng)站免費推廣廣告鏈接
  • 做網(wǎng)站的風(fēng)險英文站友情鏈接去哪里查
  • 網(wǎng)站開發(fā)職業(yè)崗位站長工具官網(wǎng)
  • 辦個人網(wǎng)站租空間免費推廣平臺有哪些
  • 建設(shè)一下網(wǎng)站要求提供源碼百度查詢網(wǎng)
  • 網(wǎng)站建設(shè)談客戶說什么網(wǎng)絡(luò)營銷有哪些形式
  • 建站網(wǎng)站怎么上傳代碼奉節(jié)縣關(guān)鍵詞seo排名優(yōu)化
  • 學(xué)生可以做的網(wǎng)站兼職百度論壇發(fā)帖
  • 廣州網(wǎng)站設(shè)計價格手機優(yōu)化大師官方版
  • wordpress注冊郵箱發(fā)送網(wǎng)站 seo
  • 網(wǎng)站做外鏈的技巧天津seo網(wǎng)絡(luò)
  • 建一個團購網(wǎng)站要多少錢網(wǎng)站建設(shè) 網(wǎng)站制作
  • 做什么網(wǎng)站能吸引流量免費正規(guī)大數(shù)據(jù)查詢平臺
  • 鶴壁網(wǎng)站建設(shè)公司佛山網(wǎng)站建設(shè)模板
  • 國內(nèi)知名網(wǎng)站制作公司文明seo技術(shù)教程網(wǎng)
  • 深圳建設(shè)廳官方網(wǎng)站上海百度分公司電話
  • 簡述網(wǎng)站一般建設(shè)的流程圖瀏覽器谷歌手機版下載
  • 網(wǎng)站建設(shè)免費的靠得住嗎seo3
  • 云匠網(wǎng)的美工靠譜嗎石家莊seo全網(wǎng)營銷
  • 在電腦上做苗木網(wǎng)站單頁網(wǎng)站制作
  • 網(wǎng)站怎么增加流量如何優(yōu)化網(wǎng)站快速排名