最多的战斗力
小明玩网络游戏,现在总共有n个天赋点,需要分配给m项技能(0..i...m),其中第项技能所需的天赋点为ai,能够增加ei的战斗力。
若是每项技能仅允许被加点一次,请问小明使用这n个天赋点,能够增加的最多的战斗力是? 输入格式: 第一行输入两个数字n和m,以空格间隔 (1<=n,m<=1000)之后m行依次输出第i项技能所需要的天赋
数和能够增加的战斗力,以空格间隔
输出格式: 输出小明增加的最多的战斗力 (1<=ai,ei<=1000)
输入样例1:
8 3
12 6
11 8
6 8
输入样例2:
6 3
2 10
4 5
1 4
输出样例1:
8
输出样例2:
15
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> int a[1000],e[1000],vis[1000],res=0; void dfs(int n,int m,int value,int k){ if(n<0) return; if(k>=m||n==0){ res=max(res,value); return; } for(int i=0;i<n;i++){ if(!vis[i]){ vis[i]=1; dfs(n-a[i],m,value+e[i],i+1); vis[i]=0; } } } int main() { int n,m; cin>>n>>m; for(int i=0;i<m;i++){ cin>>a[i]>>e[i]; } dfs(n,m,0,0); cout<<res; return 0; }