3 条题解

  • 0
    @ 2025-4-9 17:07:17
    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
      @ 2023-4-3 18:34:18

      C++

      Florance

      给不认真上课的蠢蛋

      #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
        @ 2023-4-2 15:06:56
        #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

        「一本通 1.1 例 5」智力大冲浪

        信息

        ID
        498
        时间
        1000ms
        内存
        512MiB
        难度
        3
        标签
        递交数
        51
        已通过
        27
        上传者