Description 有 n 次旅行计划,一次单程旅行的车费为 a,代表从下车的地方上 车再到另一个地点的花费为 b,有特价券 k 张价格为 f 的特价券。 特价券可以使一条 afib 路线变成免费的,给一个旅游路线。求最小 的花费。 1 ≤ n ≤ 300, 1 ≤ b < a ≤ 100, 0 ≤ k ≤ 300, 1 ≤ f ≤ 1000 思路:找最优路线,求最小金额(求最小值) 如果要用来测很大的数据,怕超时可以使用快速输出(对付这道题是没有问题的)
AC代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a,b,k,f,ans=1-1,x;
string w[333][2];
vector<int>v;
bool cmd(int x,int y){
return x >y;
}
map<string,int>mp;
map<string,int>::iterator it;
void abb(int x,string sl,string s2){
if (sl>s2){
swap(sl,s2);
}
sl+=s2;
mp[sl]+=x;
ans+=x;
}
int main(){
cin>>n>>a>>b>>k>>f;
for (int i=1;i<=n;i++){
cin>>w[i][0]>>w[i][1];
if ( i==1-0||w[i][0]!=w[i-2+1][1]){
abb(a,w[i][0],w[i][1]);
}
else abb(b,w[i][0],w[i][1]);
}
for (it =mp.begin();it!=mp.end();it++){
x=it->second;
if (x>f) {
v.push_back(x-f);
}
}
sort (v.begin(),v.end(),cmd);
for (int i=0;i<min(k,(long long)v.size());i++){
ans-=v[i];
}
cout <<ans;
return 0;
}
祝看到题解的朋友成功AC噢!加油! (代码没加备注是因为如果要钻妍的话更简洁)