CSU 1671 經營小賣部 完全揹包 DP

2021-08-04 23:32:46 字數 2034 閱讀 3421

#[csu 1671 經營小賣部](

暑假很多店都關門了,還堅持營業的店可以收攬大多數客戶。

每個商品有自己的進價和售價,你可以根據自己的要求以進價購入任意數量的商品,

並全部以售價賣出。

但是部分商品要求小賣部要有對應設施,

比如冰淇淋和飲料要求有冰箱,粽子和速食麵要求有微波爐。

那麼,如何才能得到最大利潤?

多組資料,第一行有乙個整數

t ,表示有

t 組資料。

( t<=100

) 以下每組資料

第一行有 四

個整數x,n,p1

和 p2。x是你們的資金總數

(1<=

x <=

1000

) 。n 表示

商品種類數

(1<=

n <=

100) ,p1和p2分別

表示冰箱和微波爐的**

(1<=

p1,p2

<=

1000

) 。之後n行每行三個整數,c1,c2(

1<=

c1,c2

<=

1000)和a,分別表示這個商品的進價、售價和對裝置的要求(a為0表示無需求,a為1表示需要冰箱,a為2表示需要微波爐)。

乙個整數,表示最大的利潤。

2

10 3 1 1

1 2 0

1 3 1

2 4 2

10 3 1 1

5 6 0

3 5 1

5 11 2

17

6

lvv

現有資金x元,現在要購進n種商品,進價為c1,售價為c2。

同理,需要冰箱的話也得購買。要怎麼利用現有資金來購進商品。使得利潤最大化?

商品數目未定,總資金確定。可以很容易看出來這是乙個完全揹包問題。

把資金看成揹包,來往裡面放商品。

需要對只有空調、只要微波爐、兩個都要、兩個都不要四種情況分別做完全揹包。取最大值即為最大利潤。

#include

#include

#include

#include

#include

using

namespace

std;

int t,x,n,p1,p2,c1,c2,a,ans,sum;

int dp[10005];

struct nodes[105];//定義每個商品

int main()

ans=0;

//兩個都不買

memset(dp,0,sizeof(dp));

for(int j=0;j<=x;j++)

for(int i=0;iif(j>=s[i].jinjia&&s[i].xuqiu==0)

ans=max(ans,dp[j]-j);

}//買冰箱

memset(dp,0,sizeof(dp));

for(int j=0;j<=x-p1;j++)

for(int i=0;iif(j>=s[i].jinjia&&s[i].xuqiu!=2)

ans=max(ans,dp[j]-j-p1);

}//買微波爐

memset(dp,0,sizeof(dp));

for(int j=0;j<=x-p2;j++)

for(int i=0;iif(j>=s[i].jinjia&&s[i].xuqiu!=1)

ans=max(ans,dp[j]-j-p2);

}//兩個都買

memset(dp,0,sizeof(dp));

for(int j=0;j<=x-p1-p2;j++)

for(int i=0;iif(j>=s[i].jinjia)

ans=max(ans,dp[j]-j-p1-p2);

}cout

0;}

1671 凡事都要簽到啦

現在有學生的資訊,有語數外三門課程的成績,需要你幫我排序,排序的要求是,按照平均分從大到小排序,平均分一樣的按照數學分數從大到小,數學分數還是一樣的話,按照語文的分數從大到小排序,語文分數一樣的按照外語分數從小到大排序。第一行乙個整數n n 5000 接下來n行每一行三個整數表示,數學,英語,語文的...

mycat1 6 7 1 實現讀寫分離

說明 配置mycat 讀寫分離前需要先配置mysql主從複製架構,mycat官網推薦mysql主從模式和pxc模式。環境 centos7 mysql5.7 mycat1.6.7.1 配置賬號 對資料庫進行授權等允許使用者訪問那些資料庫。server.xml 123456 user testdb tr...

1671 設計前中後佇列

題目描述 請你設計乙個佇列,支援在前,中,後三個位置的 push 和 pop 操作。請你完成 frontmiddleback 類 frontmiddleback 初始化佇列。void pushfront int val 將 val 新增到佇列的 最前面 void pushmiddle int val...