还是DP题,我很无语,题目都看了好长时间!
#include<stdio.h>
#define INF 10000000
#define N 1000+10
int time[N],t[N],m;
int dp(int n)
{
int i,ans = INF;
if(n == 0)
return 0;
if(time[n] < INF)
return time[n];
for(i = n; i >= 1; i--)
{
if(ans > dp(n-i) + t[i] + m)
ans = dp(n-i) + t[i] + m;
}
return time[n] = ans;
}
int main()
{
freopen("T8.in","r",stdin);
int k,n,i;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&n,&m);
for(i = 1; i <= n; i++)
{
time[i] = INF;
scanf("%d",&t[i]);
if(i == 1)
t[i] += m;
t[i] += t[i-1];
}
printf("%d\n",dp(n) - m);
}
return 0;
}