巴比伦塔-小强版

#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;

 int w,n,v,r,t,i,maxn,j;
 multimap<int,int> mps;
 multimap<int,int>::iterator it2;
 int state[100];
 vector<int> vt;
void f(int num,int &W,int &t,int R)
{
 it2 = mps.begin();
 if(num==0)
 {
  if(it2->second<=W && it2->first < R)
   t++;
  if(t>maxn)
   maxn = t;
  return;
 }

 for(j=0;j<num;j++)
  it2 ++;
 int tw = it2->second;
 int mw = W;
 int mt = t;
 int mr = it2->first;
 if(tw<=W)
 {
  f(num-1,W,t,R);
  W = mw;
  t = mt;
  if(tw == W && mr<R)
  {
   t++;
   if(t>maxn)
    maxn = t;
  }
  else if(mr<R)
  {
   W = W - tw;
   t++;
   f(num -1,W,t,mr);
  }
 }
 else
  f(num-1,W,t,R);
}
int main()
{

 while(cin>>w>>n)
 {
  maxn =0;
  t = n;
  for(i=0;i<n;i++)
   state[i]=0;
  mps.clear();
  while(t--)
  {
   cin>>v>>r;
   mps.insert(pair<int,int>(r,v));
  }
  it2=mps.begin();
  t = 0;
  int R = 1000;
  f(n-1,w,t,R);
  cout<<maxn<<endl;
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值