1 条题解

  • 1

    思路

    注意到这道题贪心成立,如果一个箱子里面有 nn 个物品,则将重量前n1n-1的物品搬走(也就是只剩下重量最大的物品)花费最小。

    code

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int a[100005];
    
    vector<int> w[100005];
    
    long long ans;
    
    int n,t;
    
    int main(){
    
    	cin>>n;
    
    	for(int i=1;i<=n;i++)	cin>>a[i];
    
    	for(int i=1;i<=n;i++){
    
    		cin>>t;
    
    		w[a[i]].push_back(t);
    
    	}
    
    	for(int i=1;i<=n;i++){
    
    		if(w[i].size()<=1)	continue;//如果有多个物品
    
    		sort(w[i].begin(),w[i].end());
    
    		for(int j=0;j<w[i].size()-1;j++)	ans+=w[i][j];//只剩下一个最大的
    
    	}
    
    	cout<<ans;
    
    	return 0;
    
    }
    

    信息

    ID
    900
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    1
    上传者