P1071新年趣事之打牌

2022-05-12 10:05:29 字數 1842 閱讀 8595

過年的時候,大人們最喜歡的活動,就是打牌了。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

0典型的揹包dp記錄方案總數。。。然後再來乙個記錄路徑就好了。。。。

4 #include5 #include6 #include7 #include8 #include9 #include10 #include

11 #include12 #include13 #include14 #include

15#define inf 1000000000

16#define maxn 10000+5

17#define maxm 10000+5

18#define eps 1e-10

19#define ll long long

20#define for0(i,n) for(int i=0;i<=(n);i++)

21#define for1(i,n) for(int i=1;i<=(n);i++)

22#define for2(i,x,y) for(int i=(x);i<=(y);i++)

23#define for3(i,x,y) for(int i=(x);i>=(y);i--)

24#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

25using

namespace

std;

26int

f[maxn],book[maxn],w[maxn],mark[maxn],p[maxn];

27int

read()

30while(ch>='

0'&&ch<='9')

31return x*f;32}

33int

main()

44if(f[m]==0)printf("0"

);45

else

53 for1(j,n)if(mark[j]==0)printf("

%d "

,j);54}

55}56return0;

57 }

view code

vijosP1071 新年趣事之打牌

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

vijos p1071新年趣事之打牌

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

新年趣事之打牌

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