水题
There is a mountain near yifenfei’s hometown. On the mountain lived a big monster. As a hero in hometown, yifenfei wants to kill it.
Now we know yifenfei have n spells, and the monster have m HP, when HP <= 0 meaning monster be killed. Yifenfei’s spells have different effect if used in different time. now tell you each spells’s effects , expressed (A ,M). A show the spell can cost A HP to monster in the common time. M show that when the monster’s HP <= M, using this spell can get double effect.
Now we know yifenfei have n spells, and the monster have m HP, when HP <= 0 meaning monster be killed. Yifenfei’s spells have different effect if used in different time. now tell you each spells’s effects , expressed (A ,M). A show the spell can cost A HP to monster in the common time. M show that when the monster’s HP <= M, using this spell can get double effect.
Each test case include, first two integers n, m (2<n<10, 1<m<10^7), express how many spells yifenfei has.
Next n line , each line express one spell. (Ai, Mi).(0<Ai,Mi<=m).
3 100 10 20 45 89 5 40 3 100 10 20 45 90 5 40 3 100 10 20 45 84 5 40
3 2 -1
#include<stdio.h>
#include<algorithm>
using namespace std;
#include<iostream>
#include<string.h>
int A,M,MIN;
int vis[20],AI[20],MI[20];
void DFS(int blood,int num)
{
if(num>A)//技能次数超过技能数
{
return ;
}
if(blood<=0)
{
if(num<MIN)
MIN=num;
return ;
}
for(int i=0; i<A; i++)
{
if(!vis[i])
{
vis[i]=1;//标记用过的技能
if(blood<=MI[i])
DFS(blood-2*AI[i],num+1);//暴击效果
else
DFS(blood-AI[i],num+1);//普攻
vis[i]=0;
}
}
}
int main()
{
while(~scanf("%d%d",&A,&M))
{
for(int i=0; i<A; i++)
{
scanf("%d%d",&AI[i],&MI[i]);
vis[i]=0;
}
MIN=A+1;
DFS(M,0);//血量和使用次数
if(MIN==A+1)
printf("-1\n");
else
printf("%d\n",MIN);
}
}