多重揹包問題。
因為食物可以被分開運輸,所以只要運輸的總空間大於美味值大於等於p的所有食物所需要的空間之和即可。可以將問題分成兩個部分:
第一步我們可以用多重揹包輕鬆解決,但第一步的答案可能會很大,無法在第二問直接用揹包。不妨將狀態和結果互換,以需要的費用作為狀態,而用最大的空間作為答案。至此,我們可以設f[i]表示美味度之和為i的食物所用的最少空間,g[i]表示費用為i時最大能裝的空間。注意到最大的費用只有50000,所以是可行的。但是需要注意的一點是,當求f[i]時,因為p<=50000所以我們可能會以為最大的食物的美味值之和只用做到50000,但實際上要做到更大一點,因為有可能幾個食物的美味值大於了50000,但空間卻更小,所以我們就要做到50000再多加乙個食物的美味度就夠了(即做到的當前這個),因為若多選2個或以上雖然美味值增加了,但是空間一定會比選乙個的要少。
最後,我們發現時間複雜度乘了乙個test後,可能會很大,所以要加二進位制拆分法或是單調佇列優化多重揹包,詳細內容可自行在網上搜尋或檢視我的部落格。
#include#include#include#define n 2100
using namespace std;
int t,n,m,p,t,u,v,x,y,z,st,tot,ans,a[n],b[n],f[50110],g[50010];
int read()
while(ch>='0'&&ch<='9')
return w*x;
}void add(int x,int y,int z)
}int main()
u=ans=50001;
for(int i=p;i<=p+100;i++) u=u>f[i]?f[i]:u;
if(u>50000)
for(int i=1;i<=m;i++)
/*for(int j=1;j<=z;j++)
for(int k=50000;k>=y;k--)*/
//不加優化的多重揹包
} printf(ans==50001?"tat\n":"%d\n",ans);
} return 0;
}
JZOJ 4224 五校聯考3day1 食物
傳送門 給出每個食物和運輸工具的資訊,求在不花費超過50000 50000 5000 0並且美味值達到p pp的情況下的最小代價 多重揹包後在來一次多重揹包 include include include include include include include include include...
五校聯考3day2 A
這題考場考慮不太全 但相比於60,其它90分的人,還是很全的 long long我是開了的,然後後面的特判我也是加了的,可是竟然打錯了?其實這題不需要打的像我這樣麻煩 設a i 表示i點還需連線的邊數 ans表示sigma a i max表示max a i 如果max ans 2,就說明全部連項那個...
五校聯考3day2 A
帝國時代3是一款十分刺激的rts遊戲。你需要控制自己的一塊殖民地,發展殖民地的經濟和軍事,最終打敗其他殖民地。小l是這個遊戲的狂熱愛好者。一次小l打算打ai試試身手。小l發展了幾分鐘,自己的殖民地人口便突破了30,然而小l發現大事不好了 小l還處在不能建造軍事單位的 發現時代 然而敵人早已經到了 殖...