思路: 因为每天只能做一种作业 对每个作业都是均等的(不看分数) 有点贪心思想(尽量先写分数大的作业 且尽量在快到截止日期时写 ) 理解这点就差不多了
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; struct node { int deal; int gard; }num[1100]; int cmp(node a,node b) { return a.gard>b.gard; } int main() { int T,n,i,j,mark[1010]; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&num[i].deal); for(i=1;i<=n;i++) scanf("%d",&num[i].gard); memset(mark,0,sizeof(mark)); int sum=0; sort(num+1,num+1+n,cmp); for(i=1;i<=n;i++) { int flash=0; for(j=num[i].deal;j>=1;j--) { if(mark[j]==0) {mark[j]=1;flash=1;break;} } if(flash==0) sum+=num[i].gard; } printf("%d\n",sum); } return 0; }
时间: 2024-10-29 00:45:38