当前位置 博文首页 > ApocalypseTq的博客:P7791 [COCI2014-2015#7] TETA 题解返回题
题意简述
给出?nn?道菜及其价格。
其中有四种不重复的菜可以组成一份套餐,价格为?cmpcmp?。
给出需要买的菜品,其中,不在套餐中的需要单付,在套餐中的可以选择以整个套餐的价格支付部分套餐中的菜或每个菜都选择单付,求支付的最小金额。
套餐可以不限量地买,但每个套餐中只能有同种菜品中的一道菜(坑点)。
题目分析
当菜品不在套餐中,?ansans?直接加上单价。
当菜品在套餐中,则在?sumsum?数组中记录该种菜品的数量。
在?mpmp?中对于?sumsum?数组大于?00?的菜品价钱取和,与套餐价作比较,取价格更低的,即?\min(cmp,mp)min(cmp,mp)?,计入?ansans?,并重复。
代码:
#include<iostream>
using namespace std;
int n,pr[25],cmp,p1,p2,p3,p4,t,wb[25],ap,mp,ans,sum[25];
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>pr[i];
cin>>cmp>>p1>>p2>>p3>>p4>>t;
for(int i=1;i<=t;i++){
cin>>wb[i];
if(p1==wb[i]||p2==wb[i]||p3==wb[i]||p4==wb[i])
sum[wb[i]]++;
else ap+=pr[wb[i]];
}
for(int i=1;i<=t;i++){
mp=0;
for(int j=1;j<=n;j++)
if(sum[j]>0){
mp+=pr[j];
sum[j]--;
}
ans+=min(mp,cmp);
}
cout<<ans+ap;
return 0;
}
cs