HDU-4415 Assassin’s Creed 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4415
用贪心来解,开始分为两个集合的方法错了,没有考虑之间的相互影响,正确的姿势应该是这样的,分两种情况考虑:
1.只考虑Bi全为0的集合,排个序,能取多少就取多少。
2.如果Bi不为0的集合中的Ai的最小值low如果大于m,那么就到了 1 的情况。否则两个集合放在一起排个序,Bi不为0的集合中至少选取low,刀的总数为sum,那么除去排序后sum个Ai值大的敌人,然后还剩下m-low个durability。用这m-low去消灭剩下的集合。
//STATUS:C++_AC_500MS_1012KB
#include <functional>
#include <algorithm>
#include <iostream>
//#include <ext/rope>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cstring>
#include <cassert>
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
//using namespace __gnu_cxx;
//define
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define PI acos(-1.0)
//typedef
typedef __int64 LL;
typedef unsigned __int64 ULL;
//const
const int N=;
const int INF=0x3f3f3f3f;
const int MOD=,STA=;
const LL LNF=1LL<<;
const double EPS=1e-;
const double OO=1e15;
const int dx[]={-,,,};
const int dy[]={,,,-};
const int day[]={,,,,,,,,,,,,};
//Daily Use ...
inline int sign(double x){return (x>EPS)-(x<-EPS);}
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
template<class T> inline T Min(T a,T b){return a<b?a:b;}
template<class T> inline T Max(T a,T b){return a>b?a:b;}
template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
//End struct Node{
int a,b;
}p[N];
int vis[N];
int T,n,m; int cmp(Node a,Node b)
{
return a.a<b.a;
} int main()
{
// freopen("in.txt","r",stdin);
int ca=,i,j,a,b,sum,low,flag;
int cnt1,ans1,cnt2,ans2;
scanf("%d",&T);
while(T--)
{
low=INF;
cnt1=ans1=cnt2=ans2=sum=;
scanf("%d%d",&n,&m);
for(i=;i<n;i++){
scanf("%d%d",&p[i].a,&p[i].b);
if(p[i].b)sum+=p[i].b;
}
sort(p,p+n,cmp);
for(i=;i<n;i++){
if(p[i].b)continue;
if(ans1+p[i].a>m)break;
ans1+=p[i].a;
cnt1++;
}
for(i=;i<n;i++)
if(p[i].b){flag=i;low=p[i].a;break;}
if(low<=m){
ans2=low;
if(sum+>=n)cnt2=n;
else {
cnt2=sum+;
n-=sum;
if(flag>=n)n--;
for(i=;i<n;i++){
if(i==flag)continue;
if(ans2+p[i].a>m)break;
ans2+=p[i].a;
cnt2++;
}
}
}
if(cnt2>cnt1 || (cnt2==cnt1 && ans2<ans1)){
swap(ans1,ans2);swap(cnt1,cnt2);
} printf("Case %d: %d %d\n",ca++,cnt1,ans1);
}
return ;
}
HDU-4415 Assassin’s Creed 贪心的更多相关文章
- HDU 4415 - Assassin’s Creed
		Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ... 
- HDU 4415 Assassin's Creed(贪心)
		pid=4415">HDU 4415 题意: 壮哉我Assassin! E叔有一柄耐久度为m的袖剑,以及n个目标士兵要去解决. 每解决掉一个士兵,消耗袖剑Ai的耐久度.且获得该士兵的武 ... 
- Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖
		题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ... 
- Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖
		标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ... 
- Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
		题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ... 
- hdu 4825 Xor Sum(trie+贪心)
		hdu 4825 Xor Sum(trie+贪心) 刚刚补了前天的CF的D题再做这题感觉轻松了许多.简直一个模子啊...跑树上异或x最大值.贪心地让某位的值与x对应位的值不同即可. #include ... 
- ACM学习历程—HDU4415 Assassin’s Creed(贪心)
		Problem Description Ezio Auditore is a great master as an assassin. Now he has prowled in the enemie ... 
- HDU 5813 Elegant Construction (贪心)
		Elegant Construction 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5813 Description Being an ACMer ... 
- HDU 5802 Windows 10 (贪心+dfs)
		Windows 10 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5802 Description Long long ago, there was ... 
随机推荐
- c++ 重定位输出到DOS
			#define USE_WIN32_CONSOLE int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTST ... 
- bat写的自动部署脚本
			windows7的机器上重启服务需要关闭UAC ::编译部署项目 echo off echo 1. GatewayAdaptor echo 2. LogicService echo 3. Messag ... 
- Spring中argNames的含义
			最近学习Spring,一直不太明白Srping的切面编程中的的argNames的含义,经过学习研究后,终于明白,分享一下 先看一个例子: 需要监控的类: package bean; public cl ... 
- [BZOJ 3774] 最优选择 【最小割】
			题目链接:BZOJ - 3774 题目分析 此题与“文理分科”那道题目有些类似.都是使用最小割来求解,先加上可能获得的权值,在减掉必须舍弃的权值(最小割). 文理分科是规定每个人和 S 连就是选文,和 ... 
- 解决win8 plsql无法登录
			今天安装完oracle客户端,然后打开 plsql 之后,就一个提示框,提示没有登录,后来解决方法如下: 在plsql的图标上点右键,以管理员身份运行,即可! 如果不想一直点右键执行,就图标上点右键- ... 
- codeforces 395B2 	 iwiwi
			#include<cstdio> #include<cstring> using namespace std; ]="iiiiiiiiiiiiiiiiiiiiii&q ... 
- Design Tutorial: Make It Nondeterministic
			Codeforces Round #270:C;http://codeforces.com/contest/472 题意:水题 题解:贪心即可. #include<iostream> #i ... 
- HDU 1166 敌兵布阵(线段树 单点更新)
			点我看题目 题意 :HDU的中文题也不常见....这道题我就不详述了..... 思路 :这个题用线段树用树状数组都可以,用线段树的时候要注意输入那个地方,输入一个字符串的时候不要紧接着输入两个数字 ... 
- percona-xtrabackup安装及使用教程
			安装percona-xtrabackup依赖包(前提已安装mysql) yum -y install perl-CPAN perl-DBD-MySQL perl make gcc gcc-c++ pa ... 
- dropdownlist无刷新传值
			既然局部刷新,其实没有必要用服务器控件,即便用了服务器控件,也不应该将AutoPostBack="true" ,这将导致页面回发并刷新,因此去掉下拉框的该属性 至于局部改变div的 ... 
