vijos 1071 01揹包 輸出路徑

2022-05-20 10:48:13 字數 1701 閱讀 9016

過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。

這天,正當一群人打牌打得起勁的時候,突然有人喊道:「這副牌少了幾張!」眾人一數,果然是少了。於是這副牌的主人得意地說:「這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的牌的總重量,就能知道少了哪些牌了。」大家都覺得這個辦法不錯,於是稱出剩下的牌的總重量,開始計算少了哪些牌。由於資料量比較大,過了不久,大家都算得頭暈了。

這時,xiaomengxian大聲說:「你們看我的吧!」於是他拿出膝上型電腦,編出了乙個程式,很快就把缺少的牌找了出來。

如果是你遇到了這樣的情況呢?你能辦到同樣的事情嗎?

第一行乙個整數totalw,表示剩下的牌的總重量。

第二行乙個整數n(1接下來n行,每行乙個整數wi(1<=wi<=1000),表示每一張牌的重量。

如果無解,則輸出「0」;如果有多解,則輸出「-1」;否則,按照公升序輸出丟失的牌的編號,相鄰兩個數之間用乙個空格隔開。

270

4100

110170

200

2 4

題意:就是個裸的01揹包,加個路徑輸出。

思路:記錄下當前值下的前乙個值,順帶記錄序號,最後遍歷一遍,篩出沒出現過的數就好了。

/** @date    : 2016-11-29-08.14

* @author : lweleth ([email protected])

* @link :

* @version :

*/#include#define ll long long

#define pii pair#define mp(x, y) make_pair((x),(y))

#define fi first

#define se second

#define pb(x) push_back((x))

#define mmg(x) memset((x), -1,sizeof(x))

#define mmf(x) memset((x),0,sizeof(x))

#define mmi(x) memset((x), inf, sizeof(x))

using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 1e5+2000;

int w, n;

int dp[100010];

int re[100010];

int mp[100010];

int a[110];

int main()

mmf(dp);

mmf(re);

int flag = 0;

dp[0] = 1;

for(int i = 1; i <= n; i++)}}

if(!dp[w])

printf("0\n");

else if(dp[w] > 1)

printf("-1\n");

else

for(int i = 1; i <= n; i++)

}printf("\n");}}

return 0;

}

Vijos 採藥 揹包

辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裡,你可以採...

01揹包 vijos1133 裝箱問題

p1133裝箱問題 accepted 標籤 noip普及組2001 顯示標籤 有乙個箱子容量為v 正整數,o v 20000 同時有n個物品 o n 30 每個物品有乙個體積 正整數 要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為最小。第一行,乙個整數,表示箱子容量 第二行,乙個整數,...

vijos1037搭建雙塔(一維揹包問題)

2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取m 1 m...