1 条题解

  • 2
    @ 2024-8-19 11:47:10

    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
    上传者