Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;int min(int x,int y){return x>=y?y:x;}int a[200],b[200],value[20000];int main(){int Q;scanf("%d",&Q);int n,m,k,t;while(Q--){scanf("%d%d%d%d",&n,&m,&k,&t);for(int i=0;i<m;i++)scanf("%d",&a[i]);for(int i=0;i<m;i++)scanf("%d",&b[i]);int base=1,v=0,stride=0,s;int ans=0;for( s=0;s<n;s++){memset(value,0x4f,sizeof(value));value[0]=0;for(int i=0;i<m;i++)if((v=b[i]/base)>0)for(int j=0;j<k;j++){stride=min(j+v,k);value[stride]=min(value[stride],value[j]+a[i]);}base*=t;if(value[k]==0x4f4f4f4f) break;