(多重揹包)HDU1059Dividing

2021-10-01 23:25:11 字數 765 閱讀 6017

給你質量為1~6的寶石的個數,問能不能等分。

對於總質量為奇數的肯定不能等分,對於質量為偶數的,只要dp[m]==m(m=sum/2)就可以等分,這樣就是多重揹包問題了。坑點是輸出格式,要兩個換行。

#include

const

int n=

1e5+10;

const

int mod=

1e7+9;

const

int maxn=

0x3f3f3f3f

;const

int minn=

0xc0c0c0c0

;const

int inf=

99999999

;using

namespace std;

int a[7]

,dp[n]

;int

main()

if(sum==0)

break

;else

if(sum%2==

1)else}if

(dp[m]

==m)

printf

("collection #%d:\ncan be divided.\n\n"

,t);

else

printf

("collection #%d:\ncan't be divided.\n\n"

,t);}}

return0;

}

HDU 1059 多重揹包

個人覺得,這個可以作為多重揹包的模板使用,其中包括了簡單的0 1揹包和完全揹包,分清楚它們三個的區別。include include define n 60005 define max a,b a b?a b int c n void complete int cost,int weight,int...

hdu 1059 多重揹包

題目的意思 有一堆大理石,按其大小分為1 6 種價值,兩個人想分得的價值相同的大理石,已知每種價值的大理石個數,問是否能讓兩個人分得價值相同的大理石?題目輸入 1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0 題目輸出 collection 1 can t be divided...

hdu1059 多重揹包

這道剛開始都沒想出來。後來發現我以前做了一道和這個完全一樣的題,就是計蒜客的平分娃娃,好菜呀 t t 說的可能有些繁瑣。大佬可以忽略,直接看 一道經典的多重揹包問題,但是會卡時間,用二進位制優化一下就解決了。這裡重點講思路,題目問的如何將一堆彈珠均等對半分,可以先這樣想,乙個彈珠價值6,它的體積也是...