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

歡迎訪問 生活随笔!

生活随笔

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

java

POJ-4004:数字组合(用位移方法解组合数问题,Java版)

發(fā)布時(shí)間:2025/3/20 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ-4004:数字组合(用位移方法解组合数问题,Java版) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述:

? ? 看完題目大家應(yīng)該就會(huì)想到這題可以用一個(gè)組合數(shù)的思路去編寫代碼。也就是說我們從給出的一個(gè)數(shù)組中去隨機(jī)地抽取中若干個(gè)數(shù)相加,相加的和要等于給出的那個(gè)數(shù)。雖然大致思想是沒錯(cuò)了,但是,具體的思路是怎么樣的呢?


思路分析:

? ? 我們是不是會(huì)有一種通用的方法來得到一維數(shù)組,用來告訴計(jì)算機(jī),這個(gè)一維數(shù)組的某一個(gè)位置是我要選取的數(shù)呢?

可能大家都會(huì)想到的是遞歸,不過我一個(gè)朋友給了我另一個(gè)思路,那就是用位移來解決這個(gè)問題。為什么用位移,因?yàn)榭?#xff01;

? ? 這里面有一個(gè)小技巧,那就是1<<n是等于2的n次方(例如1<<5 = 32)。也就是說把1左移n位,這里會(huì)得到一個(gè)結(jié)果,這個(gè)結(jié)果就是我們這個(gè)一維數(shù)組全部的子集,也就是全部的組合數(shù)。

? ? 其實(shí)如果你了解數(shù)字在計(jì)算機(jī)中的存儲(chǔ)和遞增過程,那么你就會(huì)得到一個(gè)有趣的結(jié)論,那就是我從0(空集)到1<<n這些數(shù)代表的就是我們要告訴計(jì)算機(jī)在那些位上是我們需要留下的,那些位上的數(shù)是我們不需要的。關(guān)于數(shù)字在計(jì)算機(jī)中的存儲(chǔ)和遞增過程這里不作講解。有興趣的朋友可以去查閱相關(guān)資料。

? ? 以上只是得到了全部的組合數(shù)。而他們也都是單個(gè)數(shù)字代表的,那我們能不能通過某種操作或是計(jì)算來獲得一個(gè)標(biāo)志數(shù)組或是某他的什么東西來說明,當(dāng)前數(shù)組的第i位是需要的呢?因?yàn)閱问且粋€(gè)數(shù)字代表的某種組合還不能讓計(jì)算機(jī)完全理解,我們需要的是哪個(gè)位置的值。

下面我們假設(shè)有一個(gè)數(shù)字5,那我們應(yīng)該怎么得到這個(gè)數(shù)字5所代表的組合呢?

0101
0001
上面的表格的第一行是數(shù)字5,第二行是數(shù)字1.

我們現(xiàn)在假設(shè)題目中告訴我們的是只有4個(gè)數(shù)。

那么,我們先得到a&1的值(&是位且操作符,它的作用是當(dāng)兩個(gè)數(shù)的每個(gè)二進(jìn)制位的值都是1時(shí),該位的值才是1,。。。。。。。想知道具體的,請(qǐng)查閱資料)。

這樣,我們由第一個(gè)表格就可以得到一個(gè)數(shù)字1,我們把它保存在b[0]中。

這時(shí),a右移a>>1 = 0010b

0010
0001
同理,這時(shí)b[1] = 0

a右移a>>1 = 0001

0001
0001
b[2] = 1

a右移a>>1 = 0000

0000
0001
b[3] = 0

a的位移結(jié)束。。。這時(shí)我們就得到了一個(gè)一維數(shù)組b[] = {1, 0, 1, 0};

我們可以看到它就是我們的a的二進(jìn)制的逆序,如果你不喜歡逆序,那就用自己的方式獲得正序的數(shù)組。


關(guān)于a的位移關(guān)鍵代碼:

private static int[] getBitShift(int a, int n) {int[] bit = new int[n];for (int i = 0; i < n; ++i) {bit[i] = a&1;a >>= 1;}return bit;}


-------------------------------------------- 完整 AC CODE -----------------------------------------

import java.util.Scanner;public class Main {private static final int N = 4;/*** 通過位移得到一個(gè)組合數(shù)的一維數(shù)組* @param a* @param n* @return*/private static int[] getBitShift(int a, int n) {int[] bit = new int[n];for (int i = 0; i < n; ++i) {bit[i] = a&1;a >>= 1;}return bit;}/*** 得到某個(gè)bit數(shù)組所對(duì)應(yīng)的sum值* @param bit* @param datas* @return*/private static int getBitShiftSum(int[] bit, int[] datas) {int sum = 0;for (int i = 0; i < datas.length; i++) {if (bit[i] == 1) {sum += datas[i];}}return sum;}/*** 得到整個(gè)數(shù)組中共有多少個(gè)這樣的組合數(shù)* @param datas* @param t* @return*/private static int getCount(int[] datas, int t) {int count = 0;for (int i = 0; i < (1 << datas.length); ++i) {int[] bit = getBitShift(i, datas.length);if (getBitShiftSum(bit, datas) == t) {count++;}}return count;}public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int t = input.nextInt();int[] datas = new int[n];for (int i = 0; i < n; i++) {datas[i] = input.nextInt();}System.out.println("" + getCount(datas, t));} }


這里再給出我另一篇博客,《用遞歸和位移進(jìn)行枚舉子集合》這里是介紹了用遞歸和位移兩種方法進(jìn)行枚舉子集合的過程,感興趣的朋友可以去看看。。。

點(diǎn)擊連接進(jìn)行查看。

總結(jié)

以上是生活随笔為你收集整理的POJ-4004:数字组合(用位移方法解组合数问题,Java版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一区二区免费电影 | 日韩成人在线视频 | 91无打码 | 久久性爱视频网站 | 少妇影院在线观看 | 爱爱91| 99精品福利 | 国产精品久久久久9999 | 欧美成人精品欧美一级 | 亚洲一级二级片 | 伊人二区 | 2019中文字幕在线视频 | 免费国产区 | 黄色a网站| 色图自拍偷拍 | 黄色最新网址 | 久久婷婷国产麻豆91天堂 | 丝袜美腿一区二区三区 | av不卡高清 | 欧美极品少妇xxxxⅹ免费视频 | 波多野结衣视频免费观看 | www.色综合 | 日韩精品v | 成年人在线视频观看 | 亚洲国产高清国产精品 | 久久国产a | 天天操天天插天天干 | 成人网导航 | 中文字幕 日韩有码 | 国内成人精品 | 国产中文网 | 日本美女一区二区 | 超碰自拍 | 台湾男男gay做爽爽的视频 | 婷婷综合五月天 | 久久不卡日韩美女 | 丰满人妻一区二区三区无码av | 欧美成人精品一区二区免费看片 | av网站免费在线观看 | 国产又粗又猛又爽又黄的视频一 | 黄页网站免费观看 | 欧美一级免费在线观看 | 国产一区二区小说 | 狠狠欧美| 九九久久免费视频 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 国产91丝袜在线播放九色 | 午夜视频一区二区 | 欧美久久激情 | 光棍影院一区二区 | 99性趣网 | 欧美一区二区三区爱爱 | 国产资源在线视频 | 少妇免费视频 | 欧美日韩中文字幕在线 | 91美女精品| 日本一级免费视频 | 欧美一级片a| 一级在线视频 | 国产999精品 | 精品久久中文 | 99精品国产成人一区二区 | 日本一级二级视频 | 欧美性大战久久久久久久蜜桃 | 91tv在线观看 | 国产日韩欧美一二三区 | 国产精品va在线观看无码 | 日韩精品无码一区二区三区 | 亚洲天堂伊人网 | 理论片毛片 | 国产毛片91| 亚洲色图17p | 2018av在线| 日本三级小视频 | www成人| 日韩一区二区影视 | av在线浏览 | 夜夜嗨av禁果av粉嫩avhd | 亚洲精品国产精品国自产网站按摩 | 精品丝袜一区 | 国产盗摄一区二区三区 | 国产欧美日韩精品一区二区三区 | 欧美亚洲网站 | 日本特黄特色aaa大片免费 | 91欧美一区二区 | 91黄色在线视频 | xvideos永久免费入口 | 51精品| 永久久久久久久 | 日本成人精品在线 | 国产老女人乱淫免费可以 | 亚洲自拍在线观看 | 亚洲国产精品毛片 | 产乳奶汁h文1v1 | 国产传媒在线播放 | 午夜免费激情视频 | a级免费观看 | 日韩网站免费观看 | 国产精品99无码一区二区视频 |