Description
过年的时候大家都要放五彩缤纷的烟火。让我们来做一次烟火设计师。
我们有一共有n发烟火弹,一共有m支不同的烟火筒,每个烟火筒都有一个容量L[i],所有烟火筒的容量之和刚好等于烟火弹的数量,我们要把所有烟火弹分发到各个烟火筒中。每个烟火筒还有一个固定的弹射装置,它能产生一个固定的冲击力F[i],每发烟火弹i都有一个最低所需冲击力P[i],只有当烟火筒能提供的冲击力大于等于烟火弹的所需要的冲击力,烟火才能被发射、爆炸。每发烟火弹i成功发射爆炸以后会产生一个美感M[i],作为烟火设计师,我们要让烟火产生的美感总和最大。
Input
第一行为一个正整数T,表示数据组数
接下来T*5行,每5行为一组输入数据
对于每组数据:
第一行为两个正整数n,m
第二行为m个正整数,分别表示每支烟火筒的容量
第三行为m个正整数,分别表示每支烟火筒的冲击力
第四行为n个正整数,分别表示每发烟火弹所需的最低冲击力
第五行为n个正整数,分别表示每发烟火弹能产生的美感
Output
对于每组数据输出一个正整数,为最大的美感。
Sample Input
1
3 2
1 2
3 2
2 3 3
8 9 10
Sample Output
18
Hint
1<=n<=80000,1<=m<=n,1<=F[i],P[i],M[i]<=100000
1 #include<stdio.h>/*WAcode!*/ 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 typedef struct 6 { 7 int volume; 8 int chong_; 9 int vol_; 10 }tong; 11 typedef struct 12 { 13 int chong; 14 int beauty; 15 }fire; 16 int temp1(fire M1,fire M2) 17 { 18 return M1.beauty>M2.beauty; 19 } 20 int temp2(tong M1,tong M2) 21 { 22 return M1.chong_<M2.chong_; 23 } 24 int main() 25 { 26 int T,m,n,i,j,k;/*m烟火筒数目,n烟火弹数目*/ 27 scanf("%d",&T); 28 while(T--) 29 { 30 scanf("%d%d",&n,&m); 31 fire a[n];/*烟火弹*/ 32 tong b[m];/*烟火筒*/ 33 int Bsum=0;/*美感总和*/ 34 memset(a,0,sizeof(a)); 35 memset(b,0,sizeof(a)); 36 for(i=0;i<m;i++) 37 scanf("%d",&b[i].volume); 38 for(i=0;i<m;i++) 39 scanf("%d",&b[i].chong_); 40 for(i=0;i<n;i++) 41 scanf("%d",&a[i].chong); 42 for(i=0;i<n;i++) 43 scanf("%d",&a[i].beauty); 44 sort(a,a+n,temp1); 45 sort(b,b+m,temp2); 46 for(i=0;i<n;i++) 47 { 48 for(j=0;j<m;j++) 49 { 50 if((a[i].chong<=b[j].chong_)&&(b[j].volume>b[j].vol_)) 51 { 52 b[j].vol_++; 53 Bsum+=a[i].beauty; 54 //printf("%d ",a[i].beauty); 55 //printf("%d %d %d %d\n",a[i].chong,b[j].chong_,j,b[j].vol_); 56 break; 57 } 58 59 } 60 if(j==m) 61 { 62 for(k=0;k<m;k++) 63 { 64 if(b[k].volume>b[k].vol_) 65 { 66 b[k].vol_++; 67 break; 68 } 69 } 70 } 71 } 72 printf("%d\n",Bsum); 73 } 74 }
时间: 2024-10-14 21:04:08