首页 > 代码库 > 【贪心】bzoj3709 [PA2014]Bohater
【贪心】bzoj3709 [PA2014]Bohater
把怪分成两类看:
一、回血>损血 则若先杀损血少的再杀损血多的,则为当前这一步提供了更高的可能性。因为血量是单增的,所以尽量用较少的血量去干♂耗血较少的怪物。
二、回血<损血 则若先杀回血多的再杀回血少的,则为下一步提供了更高的可能性。当前这一步的可能性也没有减少,因为即使回血多的损血很多,但是由于此时血量已经是单减的了,所以若此时无法杀掉损血多的,将来也不能。
ORZ TimeMachine And ZKY
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 typedef long long ll; 6 struct Point{ll x,y;int p;Point(const ll &a,const ll &b,const int &c){x=a;y=b;p=c;}Point(){}}; 7 Point a[100011],b[100011]; 8 int en1,en2,n; 9 bool cmp1(const Point &a,const Point &b){return a.x<b.x;}10 bool cmp2(const Point &a,const Point &b){return a.y>b.y;}11 ll hp,x,y;12 int main()13 {14 cin>>n>>hp;15 for(int i=1;i<=n;i++)16 {17 cin>>x>>y;18 if(y>x) a[++en1]=Point(x,y,i);19 else b[++en2]=Point(x,y,i);20 }21 sort(a+1,a+en1+1,cmp1);22 sort(b+1,b+en2+1,cmp2);23 for(int i=1;i<=en1;i++)24 {25 hp-=a[i].x;26 if(hp<=0) {puts("NIE"); return 0;}27 hp+=a[i].y;28 }29 for(int i=1;i<=en2;i++)30 {31 hp-=b[i].x;32 if(hp<=0) {puts("NIE"); return 0;}33 hp+=b[i].y;34 }35 puts("TAK");36 for(int i=1;i<=en1;i++) printf("%d ",a[i].p);37 for(int i=1;i<=en2;i++) printf("%d ",b[i].p);38 return 0;39 }
【贪心】bzoj3709 [PA2014]Bohater
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。