1 条题解
-
2
F1
这个题暴力的方法想必大家应该都会做,但是容易
so,我们需要另一种方法来实现这个题目。
F2(正解)
我们认真读题就会发现题目中有说到每一个时间都是顺序给出,而且并不相同的。所以我们可以对于暴力中的for循环优化,也就是只往前寻找50个。
AC code
#include <bits/stdc++.h> #define LL long long using namespace std; const int maxn=100005; int n; int tp[maxn]; int price[maxn]; int t[maxn]; int mp[maxn]; int ans=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>tp[i]>>price[i]>>t[i]; } for(int i=1;i<=n;i++){ if(tp[i]){ bool flag=1; for(int j=max(0,i-50);j<i;j++){ if(tp[j]==0&&mp[j]==0&&t[i]-t[j]<=45&&price[i]<=price[j]){ flag=0; mp[j]=1; break; } } if(flag==1) ans+=price[i]; }else{ ans+=price[i]; } } cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 630
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 127
- 已通过
- 32
- 上传者