過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。
這天,正當一群人打牌打得起勁的時候,突然有人喊道:「這副牌少了幾張!」眾人一數,果然是少了。於是這副牌的主人得意地說:「這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的牌的總重量,就能知道少了哪些牌了。」大家都覺得這個辦法不錯,於是稱出剩下的牌的總重量,開始計算少了哪些牌。由於資料量比較大,過了不久,大家都算得頭暈了。
這時,xiaomengxian大聲說:「你們看我的吧!」於是他拿出膝上型電腦,編出了乙個程式,很快就把缺少的牌找了出來。
如果是你遇到了這樣的情況呢?你能辦到同樣的事情嗎?
第一行乙個整數totalw,表示剩下的牌的總重量。
第二行乙個整數n(1接下來n行,每行乙個整數wi(1<=wi<=1000),表示每一張牌的重量。
如果無解,則輸出「0」;如果有多解,則輸出「-1」;否則,按照公升序輸出丟失的牌的編號,相鄰兩個數之間用乙個空格隔開。
2704100
110170
200
各個測試點1s2 4
sample input #2
2704
100110
160170
sample output #2
-1sample input #3
2704
100120
160180
sample output #3
0ac**:
1view codevarn,i,j,tot,ans:longint;
2 a,f,g:array[0..10000] of
longint;
3 p:array[0..10000]of
boolean;
4begin
5readln(tot);
6 readln(n);f[0]:=1;7
for i:=1
to n do
readln(a[i]);
8for i:=1
to n do
9for j:=tot downto a[i] do
10begin
11if (f[j-a[i]]>0) and (f[j]=0) then g[j]:=i;
12 f[j]:=f[j]+f[j-a[i]];
13end
;14 i:=tot;
15if f[tot]>1
then
begin writeln('
-1');halt;end;16
if f[tot]=0
then
begin writeln('
0');halt;end;17
while (i>0) and (g[i]<>0) do
18begin
19 p[g[i]]:=true;
20 i:=i-a[g[i]];
21end;22
for i:=1
to n do
ifnot p[i] then write(i,'');
23end.
vijosP1071 新年趣事之打牌
vijosp1071 新年趣事之打牌 思路 01揹包 路徑輸出。用d記錄可轉移的數目,2則輸出 1,0輸出0,否則輸出路徑。對於路徑可以寫乙個遞迴過程print完成。本題的資料著實有些坑,需要注意的有陣列的範圍,使用ll。題目中為什麼沒有交待?1 include2 include3 using na...
P1071新年趣事之打牌
過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。這天,正當一群人打牌打得起勁的時候,突然有人喊道 這副牌少了幾張!眾人一數,果然是少了。於是這副牌的主人得意地說 這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的牌的總重量,就能知道少了哪...
新年趣事之打牌
新年趣事之打牌 問題描述 過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。這天,正當一群人打牌打得起勁的時候,突然有人喊道 這副牌少了幾張!眾人一數,果然是少了。於是這副牌的主人得意地說 這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的...