3 条题解
-
0
e=int(input()) n=int(input()) r=[0]*n a=list(map(int,input().split())) b=list(map(int,input().split())) for i in range(n): r[i]=[a[i],0] for i in range(n): r[i][1]=b[i] r.sort(key=lambda x: x[1]) r=r[::-1] d=[0]*n for i in range(n): flag=False for j in range(1,len(d[0:r[i][0]])+1): if d[r[i][0]-j]==0: flag=True d[r[i][0]-j]=-1 break if flag: r[i][0]=-1 for i in range(n): if r[i][0]!=-1: e-=r[i][1] print(e)
-
0
C++
给不认真上课的蠢蛋
#include using namespace std; struct Node{ int t, w; } a[510]; bool cmp (Node a, Node b) { return a.w > b.w; } int main(){ int m, n; bool v[510] = {0}; cin >> m >> n; for(int i = 1; i <= n; i++) { cin >> a[i].t; } for(int i = 1; i <= n; i++) { cin >> a[i].w; } sort(a + 1, a + 1 + n, cmp); for(int i = 1; i <= n; i++) { int j = a[i].t; while(j >= 1 && v[j]) j--; if(j >= 1) v[j] = 1; else m -= a[i].w; } cout << m; return 0; }
-
0
#include<bits/stdc++.h> using namespace std; const int Maxn=510; struct s{//定义开始与结束的结构体 int time;//每个项目时间 int money;//每个项目超时的钱 }a[Maxn]; bool cmp(s x,s y) { return x.money>y.money;//把超时所需的钱从大到小排 } int main() { int am;//总金额 cin>>am; int f;//小游戏个数 cin>>f; bool k[510];//判断是否填过的数组 memset(k,0,sizeof(k)); k[0]=1; for(int i=1;i<=f;i++) { cin>>a[i].time; } for(int i=1;i<=f;i++) { cin>>a[i].money; } sort(a+1,a+f+1,cmp); for(int i=1;i<=f;i++) { int t=a[i].time; bool p=0;//记录是否已经填入 for(int o=t;o>=1;o--)//从这个范围内的k数组从大到小遍历 { if(k[o]==0)//如果有空缺处 { p=1;//判断填上 k[o]=1;//当前k数组o位置的状态改为填上 break; } } if(p==1)//重置p { p=0; } else //如果没空填,则视为超时,扣钱 { am=am-a[i].money; p=0;//重置 } } cout<<am; }
课后总结
- 1
信息
- ID
- 498
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 51
- 已通过
- 27
- 上传者