d[i][j]表示 跑完第i个阶段,体力为j的情况下,用的最少时间
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 10000000
#define maxn 120
int d[maxn][maxn];
int T;
int T1 ,T2, T3, F1, F2,N,M;
void update(int i,int j){
if(j>=F1)
d[i+1][j-F1]=min(d[i+1][j-F1],d[i][j]+T1);
{
d[i+1][j]=min(d[i+1][j],d[i][j]+T2);
d[i+1][min(j+F2,M)]=min(d[i+1][min(j+F2,M)],d[i][j]+T3);
}
//cout<<d[i+1][j];
}
void ini(){
for(int i=1;i<=N;i++)for(int j=0;j<=M;j++)d[i][j]=INF;
memset(d[0],0,sizeof(d[0]));
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&T);while(T--){
scanf("%d%d",&N,&M);
ini();
for(int i=0;i<N;i++){
scanf("%d%d%d%d%d",&T1,&T2,&T3,&F1,&F2);
// for(int k=0;k<=M;k++)cout<<d[i][k]<<" ";cout<<endl;
for(int j=0;j<=M;j++){
update(i,j);
}
}
// for(int k=0;k<=M;k++)cout<<d[N][k]<<" ";cout<<endl;
int ans=INF;
for(int k=0;k<=M;k++)ans=min(ans,d[N][k]);
printf("%d\n",ans);
}
}