過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。
這天,正當一群人打牌打得起勁的時候,突然有人喊道:「這副牌少了幾張!」眾人一數,果然是少了。於是這副牌的主人得意地說:「這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的牌的總重量,就能知道少了哪些牌了。」大家都覺得這個辦法不錯,於是稱出剩下的牌的總重量,開始計算少了哪些牌。由於資料量比較大,過了不久,大家都算得頭暈了。
這時,xiaomengxian大聲說:「你們看我的吧!」於是他拿出膝上型電腦,編出了乙個程式,很快就把缺少的牌找了出來。
如果是你遇到了這樣的情況呢?你能辦到同樣的事情嗎?
第一行乙個整數totalw,表示剩下的牌的總重量。
第二行乙個整數n(1接下來n行,每行乙個整數wi(1<=wi<=1000),表示每一張牌的重量。
如果無解,則輸出「0」;如果有多解,則輸出「-1」;否則,按照公升序輸出丟失的牌的編號,相鄰兩個數之間用乙個空格隔開。
2704100
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...