题目大意:有n个人,每个人有x,y两个值。x代表干掉他得到的分数,分数和不超过m;y代表干掉他后你能额外干掉多少个,且不计入总分。

求干掉人数最多为多少,以及最小的分。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

考试最后40分钟想出正解贪心,思路太乱没时间码导致20。

直接说正解:优雅的贪心

如果将y为0的放入a集,其余放入b集,那么正解只能有两种情况:

1.只从a中拿。

2.拿走全部的b,剩下将b从小到大排序后去掉最小,然后将b并入a中,再从a中拿。

为什么是这样的?

首先我们可以知道,只要拿走一个b,可以带出全部的b。

这样的话可以想象将bi建成一棵树:

b1->b2->b3

\

>b4->b5

\

>b6

假设它是一棵树

假设干掉b2要100块钱,还有一个a2要200块钱。

这样我们可以先干掉b2,花100,然后b1就少了一个儿子,在把a2放进去,就是:

b2->b3

b1->a2

\

   >b4->b5

\

    >b6

这样就是花100块钱干掉a2了。

我们还发现,b1是不能被置换的,因为它没有父亲。

所以正解:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 100050
#define ll long long
int T,n,ac,bc;
ll ax[N],bx[N],by[N],m;
bool cmp(ll x,ll y)
{
return x<y;
}
int cs;
int main()
{
scanf("%d",&T);
while(T--)
{
cs++;
printf("Case %d: ",cs);
scanf("%d%I64d",&n,&m);
ll sy = ;
ac=bc=;
for(int i=;i<=n;i++)
{
bc++;
scanf("%I64d%I64d",&bx[bc],&by[bc]);
if(!by[bc])
{
ax[++ac]=bx[bc];
bc--;
continue;
}
sy+=by[bc];
}
sort(ax+,ax++ac,cmp);
ll ans1 = ;
ll ans2 = ;
for(int i=;i<=ac;i++)
{
if(ans2+ax[i]<=m)
{
ans1++;
ans2+=ax[i];
}else
{
break;
}
}
if(!bc)
{
printf("%I64d %I64d\n",ans1,ans2);
continue;
}
sort(bx+,bx++bc,cmp);
ll ans3 = sy;
ll ans4 = bx[];
if(ans4>m)
{
printf("%I64d %I64d\n",ans1,ans2);
continue;
}
for(int i=;i<=bc;i++)
{
ax[++ac] = bx[i];
}
sort(ax+,ax++ac,cmp);
for(int i=;i<=ac;i++)
{
if(ans3>=n)
{
ans3=n;
break;
}
if(ans4+ax[i]<=m)
{
ans3++;
ans4+=ax[i];
}
}
if(ans1>ans3||(ans1==ans3&&ans2<ans4))printf("%I64d %I64d\n",ans1,ans2);
else printf("%I64d %I64d\n",ans3,ans4);
}
return ;
}

HDU4415 Assassin’s Creed的更多相关文章

  1. ACM学习历程—HDU4415 Assassin’s Creed(贪心)

    Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ...

  2. HDU-4415 Assassin’s Creed 贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4415 用贪心来解,开始分为两个集合的方法错了,没有考虑之间的相互影响,正确的姿势应该是这样的,分两种情 ...

  3. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  4. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  5. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  6. HDU 4415 - Assassin’s Creed

    Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ...

  7. [GodLove]Wine93 Tarining Round #7

    比赛链接: http://vjudge.net/contest/view.action?cid=47643#overview 比赛来源: 2012 ACM/ICPC Asia Regional Han ...

  8. 微软Nokia 222:可拍照可上网 售价37美元 32GB的microSD卡扩展

    腾讯科技讯 8月27日,在几乎所有厂商都在智能手机领域大肆拼杀的时候,微软日前却悄悄地发布了一款功能手机Nokia 222. 目前,尽管全球许多发达国家的居民都对互联网已经再熟悉不过了,但事实上全球依 ...

  9. [ZZ] GTX 280 GPU architecture

    http://anandtech.com/show/2549 Now that NVIDIA’s has announced its newest GPU architecture (the GeFo ...

随机推荐

  1. 比Android更深远的改变世界——谷歌开源人工智能系统TensorFlow文档中文版

    OpenStack中国社区编者按:开源无处不在,特别在基础创新领域,未来系统软件都会是开源为主流:2015年11月9日,Google于开源了其第二代人工智能系统Tensorflow,如同6年前同样开源 ...

  2. linux文件名乱码时删除或改名的方式(转载)

    转自:http://www.linuxsa.cn/when-linux-file-name-topsy-turvy-deleted-or-renamed.html linux文件名乱码时删除或改名的方 ...

  3. bzoj 1027: [JSOI2007]合金【凸包+Floyd】

    参考:https://www.cnblogs.com/zhuohan123/p/3237246.html 因为一c可以由1-a-b得出,所以删掉c,把a,b抽象成二维平面上的点.首先考虑一个客户需求能 ...

  4. 洛谷P4114 Qtree1(树链剖分+线段树)

    传送门 LCT秒天秒地用什么树剖 这题可以算是树剖的比较裸的题目了 把每一条边的权值下放到他两边的点中深度较深的那个 然后直接用树剖+线段树带进去乱搞就可以了 //minamoto #include& ...

  5. 11.Flask-钩子函数

    在Flask中钩子函数是使用特定的装饰器的函数.为什么叫做钩子函数呢,是因为钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,那么这种函数就叫做钩子函数. before_first_requ ...

  6. 配置yum源的步骤(阿里源)

    配置yum源的步骤1.可以移除默认的yum仓库,也就是删除 /etc/yum.repos.d/底下所有的.repo文件(踢出国外的yum源) 1.配置yum源,找到阿里云的官方镜像源地址 https: ...

  7. 事件模型的介绍与Button的ActionListener

    事件监听: 这是个很重要的概念,也是个很重要的模型,vb,vc都是这样用,甚至后面学的web框架也在用.    现在我们可以做很多按钮了吧,但是我们的按钮按它是没反应的,现在我们来看看怎么样才能让它有 ...

  8. 转】Nodejs对MongoDB模糊查询

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! Posted: Jul 1, 2013 Tag ...

  9. CF919D Substring

    思路: 拓扑排序过程中dp.若图有环,返回-1. 实现: #include <bits/stdc++.h> using namespace std; ; vector<int> ...

  10. CF915C Permute Digits

    思路: 从左到右贪心放置数字,要注意判断这个数字能否放置在当前位. 实现: #include <bits/stdc++.h> using namespace std; typedef lo ...