2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届 CCPC 河南省大学生程序设计竞赛(Problem B. 扫雷 1)

这道题要用到贪心,如果后面没有比该点更便宜的地雷探测器器了,我们应该把钱全部买这个探测器,我最开始用完全背包,但明显超时了
#include<iostream>
#include<cstring>
using namespace std;
#define int long long
const int N=2*1e5+5;
int n,m;
int a[N];
int dp[N];
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
memset(dp,0x3f,sizeof(dp));
dp[n]=a[n];
for(int i=n-1;i>=1;i--)dp[i]=min(dp[i+1],a[i]);
int money=0;
int ans=0;
for(int i=1;i<=n;i++){
money++;
if(a[i]==dp[i]&&money>=a[i]){//dp[i]==a[i]说明后面没有比a[i]更便宜的了;
ans+=money/a[i];
money%=a[i];
}
}
cout<<ans;
return 0;
}

浙公网安备 33010602011771号