• HDU4415 Assassin’s Creed


    贪心

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 const int Ni = 100010;
     7 struct node{
     8     int a,b;
     9     bool operator < (const node &aa) const
    10     {
    11         return a<aa.a;
    12     }
    13 }arr[Ni];
    14 int main()
    15 {
    16     int i,n,m,t,k,cs=1;
    17     scanf("%d",&t);
    18     while(t--)
    19     {
    20         int ansm=0,ansn=0;k=-1;
    21         scanf("%d%d",&n,&m);
    22         for(i=0;i<n;i++)
    23             scanf("%d%d",&arr[i].a,&arr[i].b);
    24         sort(arr,arr+n);
    25         for(i=0;i<n;i++) if(arr[i].b>=1)
    26             break;
    27         if(arr[i].a<=m)
    28         {
    29             ansm+=arr[i].a;k=i;ansn++;
    30             for(i=0;i<n;i++)
    31                 ansn+=arr[i].b;
    32         }
    33         if(ansn>=n) {printf("Case %d: %d %d\n",cs++,n,ansm);continue;}
    34         for(i=0;i<n&&arr[i].a+ansm<=m&&ansn!=n;i++)
    35             if(i!=k) {ansm+=arr[i].a;ansn++;}
    36         printf("Case %d: %d %d\n",cs++,ansn,ansm);
    37     }
    38     return 0;
    39 }

     看了评论后完善的代码

    1

    6 5
    1 0
    1 0
    1 0
    1 0
    1 0
    5 1

    ans: 5 5

    上面的程序输出是2 5(不过也AC了可能是数据不够强)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 const int Ni = 100010;
     7 struct node{
     8     int a,b;
     9     bool operator < (const node &aa) const
    10     {
    11         return a<aa.a;
    12     }
    13 }arr[Ni];
    14 int main()
    15 {
    16     int i,n,m,t,k,cs=1;
    17     scanf("%d",&t);
    18     while(t--)
    19     {
    20         int ansm=0,ansn=0;k=-1;
    21         scanf("%d%d",&n,&m);
    22         for(i=0;i<n;i++)
    23             scanf("%d%d",&arr[i].a,&arr[i].b);
    24         sort(arr,arr+n);
    25         for(i=0;i<n;i++) if(arr[i].b>=1)
    26             break;
    27         if(arr[i].a<=m)
    28         {
    29             ansm+=arr[i].a;k=i;ansn++;
    30             for(i=0;i<n;i++)
    31                 ansn+=arr[i].b;
    32         }
    33         if(ansn>=n) {printf("Case %d: %d %d\n",cs++,n,ansm);continue;}
    34         for(i=0;i<n&&arr[i].a+ansm<=m&&ansn!=n;i++)
    35             if(i!=k) {ansm+=arr[i].a;ansn++;}
    36         int ans_n=ansn,ans_m=ansm;
    37         //考虑不杀有刀的人
    38         ansn=0;ansm=0;
    39         for(i=0;i<n&&arr[i].a+ansm<=m&&ansn!=n;i++)
    40             {ansm+=arr[i].a;ansn++;}
    41         if(ans_n>ansn||(ans_n==ansn&&ans_m<ansm))
    42             printf("Case %d: %d %d\n",cs++,ans_n,ans_m);
    43         else
    44             printf("Case %d: %d %d\n",cs++,ansn,ansm);
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    C#后台利用正则表达式查找匹配字符
    C# Dictionary 的几种遍历方法
    eval解析JSON中的注意点
    jquery datatables api (转)
    Replication--镜像+复制
    Replication--分区+复制
    Replication--进程无法在“xxxx”上执行“sp_replcmds”
    Replication--无法将事务提升为分布式事务,因为在事务中有活动的保存点
    Replication--使用MSlogreader_history查看日志读起的延迟和事务命令
    Partition--分区拆分和分区合并
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2699910.html
Copyright © 2020-2023  润新知