vijos p1071新年趣事之打牌

2022-05-12 13:02:04 字數 1660 閱讀 1618

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

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

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

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

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

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

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

270

4100

110170

200

2 4
各個測試點1s

sample input #2

2704

100110

160170

sample output #2

-1sample input #3

2704

100120

160180

sample output #3

0ac**:

1

varn,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.

view code

vijosP1071 新年趣事之打牌

vijosp1071 新年趣事之打牌 思路 01揹包 路徑輸出。用d記錄可轉移的數目,2則輸出 1,0輸出0,否則輸出路徑。對於路徑可以寫乙個遞迴過程print完成。本題的資料著實有些坑,需要注意的有陣列的範圍,使用ll。題目中為什麼沒有交待?1 include2 include3 using na...

P1071新年趣事之打牌

過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。這天,正當一群人打牌打得起勁的時候,突然有人喊道 這副牌少了幾張!眾人一數,果然是少了。於是這副牌的主人得意地說 這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的牌的總重量,就能知道少了哪...

新年趣事之打牌

新年趣事之打牌 問題描述 過年的時候,大人們最喜歡的活動,就是打牌了。xiaomengxian不會打牌,只好坐在一邊看著。這天,正當一群人打牌打得起勁的時候,突然有人喊道 這副牌少了幾張!眾人一數,果然是少了。於是這副牌的主人得意地說 這是一幅特製的牌,我知道整副牌每一張的重量。只要我們稱一下剩下的...