普通的深搜题目
#include <stdio.h>
#include <string.h>
#define INF 0xffffff
int cSpell[15], dSpell[15];
int visited[15];
int n, m;
int min;
void dfs(int hp, int cnt) {
int i;
if (hp <= 0) {
if (min > cnt) {
min = cnt;
}
return ;
} else {
for (i = 0; i < n; i++) {
if (!visited[i]) {
visited[i] = 1;
if (hp <= dSpell[i]) {
dfs(hp - 2*cSpell[i], cnt + 1);
} else {
dfs(hp - cSpell[i], cnt + 1);
}
visited[i] = 0;
}
}
}
}
int main() {
int i;
while (scanf("%d%d", &n, &m) == 2) {
memset(visited, 0, sizeof(visited));
for (i = 0; i < n; i++) {
scanf("%d%d", &cSpell[i], &dSpell[i]);
}
min = INF;
dfs(m, 0);
if (min == INF) {
printf("-1\n");
} else {
printf("%d\n", min);
}
}
return 0;
}