题目
魔兽世界巫妖王之怒
当我们在打魔兽世界高喊,刘港开大秒 Boss,刘港快给我治疗!这时候刘港确迟迟不开大招,我问刘港你在想什么?为什么不释放你的大招,刘港确说我在想,Boss 巫妖王有M滴血,我有N个技能,我每个技能都可以放无限次,每个技能的伤害为skill[i].那么我有有多少种方法造成的伤害可以正好为Boss的血量?我高喊我们在打游戏而不是在做编程题!!!!
如果无法组成请返回-1
示例1
输入:
3(技能的个数)
125(每个技能所造成的伤害)
5(Boss的血量)
输出:4
解释:刘港有4种方法可以正好可以造成血量为M秒杀 Boss:
5=5
5=2+2+1 5=2+1+1+1 5=1+1+1+1+1
示例2
输入:
输出:-1
解释:刘港没有办法造成血量正好为M
因为Boss血量为3,刘港只有一个技能这个技能伤害为2,因此无法秒杀 Boss
当数据范围量很小时,我们可以这么做
代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 50;
int w[N];
int n,k;//k相当于背包总容量
int cnt;
void dfs(int u,int k,int last){
if(k<0)return;
if(k==0){
cnt++;
return;
}
for(int i=last;i<=n;i++){
dfs(u+1,k-w[i],i);
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
cin>>k;
dfs(0,k,1);//u表示数量
cout<<(cnt==0?-1:cnt);
return 0;
}