日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

PERKET(洛谷P2036题题解,Java语言描述)

發(fā)布時(shí)間:2025/3/15 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PERKET(洛谷P2036题题解,Java语言描述) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目要求

P2036題目鏈接

分析

這是一個(gè)入坑級的DFS題

用遞歸完成DFS即可。
下面遞歸代碼的i表示當(dāng)前配料的ID,因?yàn)橐鹨粐L試的嘛。x表示酸度,由于是×,初始1;y表示甜度,由于+,初值0。遞歸的終結(jié)篇一定要讓i>num,保證跑完一趟。
既然要求酸度和甜度的絕對差最小,那就在i>num,遞歸終止前比較更新一下min的值就好啦。
遞歸的時(shí)候在每次分叉的時(shí)候都要分別進(jìn)行本次選和不選兩種情況的遞歸,每次都分兩種情況,類似搜索樹,也正印證了本題是樸素的DFS遞歸搜索題(當(dāng)然也可以不用遞歸啦)。這里比較樸素,應(yīng)該是O(2n)吧,畢竟沒法去剪枝啥的,你不到最后也不知道結(jié)果是怎樣的呀Orz……
1<=N<=10,210=1024,炸不了的,完美……

很惡心的一點(diǎn)是result要賦初值為0x3f3f3f3f,當(dāng)然可以有很多種賦值,如果不管的話會得到42分,WA到自閉。

看這位大佬的博客,也可提供另一種思路 → 位運(yùn)算解法

AC代碼(Java語言描述)

import java.util.Scanner;public class Main {private static int[] acidity_array;private static int[] sweetness_array;private static int num;private static long result = 0x3f3f3f3f;private static void dfs(int i, long x, long y) {if(i > num){if(x!=1 || y!=0) {result = Math.min(Math.abs(x-y), result);}return;}//添加的情況dfs(i + 1, x * acidity_array[i], y + sweetness_array[i]);//不添加的情況dfs(i + 1, x, y);}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);num = scanner.nextInt();acidity_array = new int[num+1];sweetness_array = new int[num+1];for (int i = 1; i <= num; i++) {acidity_array[i] = scanner.nextInt();sweetness_array[i] = scanner.nextInt();}scanner.close();dfs(1, 1, 0);System.out.println(result);}}

總結(jié)

以上是生活随笔為你收集整理的PERKET(洛谷P2036题题解,Java语言描述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。