UVA 11292 The dragon of Loowater勇士斗恶龙 11729 突击战 Commando War

恶龙的m个头,直径不同,骑士的能力不同,付的金币不同,杀完龙最少的金币,不能杀完输出“...”
输入:
m n
m行表示直径
n行表示骑士能杀的直径范围,并且应支付这么的金币
0 0 为结束行

#include<iostream> using namespace std; #include<cstdio> #include<algorithm> #include<cstring> int ans,get,drag,peo,a[20010],b[20010]; int main() { while(scanf("%d%d",&drag,&peo)==2 && drag && peo){ for(int i=0;i<drag;++i) scanf("%d",&a[i]); for(int i=0;i<peo;++i) scanf("%d",&b[i]); ans=0; get=0; sort(b,b+peo); sort(a,a+drag); for(int i=0;i<peo;++i){ // 一个数组搜索,另一个数组维护当前值 if(b[i]>=a[get]){ get++; ans+=b[i]; } if(get==drag) break; } if(get==drag) printf("%d\n",ans); else puts("Loowater is doomed!"); } return 0; }

 

 

11729  分配工作

 交代需要时间,做完工作需要时间。

贪心,列式子(分类)可知,工作需时间长的先交代

输入:

  n       // n个人

b1 j1

b2 j2   //n行,两个数据,第一个是交代需要的时间,第二个是做完工作需要的时间

0为结束行 

 

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int n;
struct job{
    int j,b;  
      bool operator < (const job& a) const {
          return  j > a.j;
     }
}; 
int main(){
    int b,j,kase = 0; 
    while(scanf("%d", &n)==1 && n){
        vector<job> v;  
        for(int i=0;i<n;++i){
            scanf("%d%d",&b,&j); 
            v.push_back( (job){j,b} ); 
        }
        sort(v.begin(),v.end());
        int ans=0,s=0;
        for(int i=0;i<n;++i){
            s+=v[i].b;
            ans= max(ans,s+v[i].j);    
        }
        printf("Case %d: %d\n",++kase,ans);        
    }
    return 0;
}

 

posted @ 2014-01-07 21:56  y丫t  阅读(215)  评论(0编辑  收藏  举报