[EGOI2021] Shopping Fever / 购物热
qwerty12346 · · 题解
题目传送门
题意
就是求海蒂她买所有
思路
直接动态规划递推每次的最小值,并从大到小排序物品的价钱。
状态定义
边界定义
将
代码
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005],f[100005];//定义dp数组
bool cmp(int x,int y){//将排序变为从大到小
return x>y;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1,cmp);//排序
memset(f,INT_MAX,sizeof(f));
f[0]=0;//边界定义
for(int i=1;i<=n;i++)
{
if(i<3)f[i]=f[i-1]+a[i]/100*(100-m);//判断
else f[i]=min(f[i-1]+a[i]/100*(100-m),f[i-3]+a[i-2]+a[i-1]);//找最小值
}
cout<<f[n]<<endl;
return 0;
}