#include #include #include #include #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long LL; const int maxn=100000+5; const int maxm=1000+5; LL a[maxn],b[maxn]; LL k[maxm],p[maxm]; LL dp[maxm][15];//防御力为j,打出i点伤害以上时所需的最少晶石 LL max(LL a,LL b) { return a>b?a:b; } LL min(LL a,LL b) { return a=up2) { printf("-1\n"); continue; } mem(dp,0); for(int i=0; i<=10; i++)//防御 { for(int j=1;j<=hp;j++)//造成伤害值 { dp[j][i]=1e18; for(int u=0;u=j) { dp[j][i]=min(dp[j][i],k[u]); } else { dp[j][i]=min(dp[j][i],dp[j-dmg][i]+k[u]); } } } } LL ans=0; for(int i=0;i