题意中的s没有用
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF (10000)
struct Node
{
int time,remain;
}a[110];
bool cmp(Node a,Node b)
{
return a.time<b.time;
}
int dp[110][110];
int main()
{
int t;
int n,K,d,s;
cin>>t;
while(t--)
{
cin>>n>>K>>d>>s;
for(int i=1;i<=K;i++)
cin>>a[i].time>>a[i].remain;
if(n==0)
{
printf("0\n");
continue;
}
sort(a+1,a+K+1,cmp);
for(int i=0;i<n;i++)
dp[0][i]=INF;
dp[0][n]=0;
a[0].time=0;
for(int i=1;i<=K;i++)
{
for(int j=0;j<=n;j++)
{
int Min=INF;
for(int k=1;k<=a[i].remain&&j+k<=n;k++)
{
Min=min(Min,dp[i-1][j+k]+(j+k)*(a[i].time-a[i-1].time)+d);
}
Min=min(Min,dp[i-1][j]+j*(a[i].time-a[i-1].time));
dp[i][j]=Min;
}
}
if(dp[K][0]>=INF)
cout<<"impossible"<<endl;
else
cout<<dp[K][0]<<endl;
}
return 0;
}