2
3
3 3 3
10 5 1
3
1 3 1
6 2 3
0
3
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #define LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; struct node{ int date,score,sd; }sub[1005]; bool vis[1005]; bool cmp(node a,node b){ return a.score>b.score||a.score==b.score&&a.date<b.date; } int t,n; void init(){ cin>>t; } void solve(){ while(t--){ fill(vis,0); cin>>n; range(i,1,n)cin>>sub[i].date; range(i,1,n){ cin>>sub[i].score; sub[i].sd=0; } sort(sub+1,sub+1+n,cmp);int ans=0; range(i,1,n) { rerange(j, sub[i].date, 1) if (!vis[j]) { vis[j] = true; sub[i].sd = 1; break; } if(!sub[i].sd)ans+=sub[i].score; } cout<<ans<<endl; } } int main() { init(); solve(); return 0; }
原文:https://www.cnblogs.com/Rhythm-/p/9344701.html