Problem B. 谜题:解场
时间限制 1000 ms
内存限制 64 MB
题目描述
小明在玩一款名为《炉石传说》的双人对战游戏,在这款游戏中,每个人会有自己的若干名随从,每名随从有两个属性——攻击力和血量,玩家可以控制自己的随从攻击敌方的随从,当随从A攻击随从B时,随从B受到等同于随从A攻击力的伤害,与此同时随从A也会受到等同于随从B攻击力的伤害,当某个随从的血量变成0或者负数时,该随从死亡。
现在小明只有一个名为WLL的随从,而敌方拥有很多随从,WLL只能攻击一次,但每当WLL杀死一名敌方随从时,WLL都会获得一次新的攻击机会。小明想要让WLL尽可能多地杀死敌方的随从,问小明最多能让WLL杀死几名敌方随从。
输入数据
第一行为两个正整数A和B,分别代表WLL的攻击力和血量 第二行为一个正整数n,代表敌方的随从个数 接下来n行每行有两个正整数Ai和Bi,代表第i个敌方随从的攻击力和血量
n<=7,攻击力和血量的值均不超过20
输出数据
输出一个非负整数,代表WLL最多能杀死的敌方随从个数
样例输入
3 4
4
1 1
2 2
3 3
4 4
样例输出
3
样例说明
WLL的初始状态为(3,4),攻击随从(1,1)后变为(3,3),攻击随从(2,2)后变为(3,1),攻击随从(3,3)后死亡,所以一共能杀死3个敌方随从
记录一下第一个深搜ac的题
#include <bits/stdc++.h>
using namespace std;
struct slaves{
int a;
int l;
};
slaves L[10];
int visited[10];
int Wa,Wl;
int n,maxn=0;
void dfs(int cur,int num)
{
if(Wl<=0||cur > n){
if(num>maxn)maxn=num;
return;
}
if(Wa>=L[cur].l)
{
Wl-=L[cur].a;
dfs(cur+1,num+1);
Wl+=L[cur].a;
}
dfs(cur+1,num);
}
int main()
{
cin>>Wa;
cin>>Wl;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>L[i].a;
cin>>L[i].l;
}
dfs(1,0);
cout<<maxn;
return 0;
}