深奥dp,状态转来转去,反正就是能解题
#include <cstdio> #include <iostream> #include <cstring> #include <map> #include<vector> using namespace std; int dp[30004]; int main() { int n,m,i,j,a; int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); scanf("%d%d",&n,&m); dp[0]=m; for(i=1; i<=n; i++) { scanf("%d",&a); dp[i]=dp[i-1]+a; } for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { dp[i]=min(dp[i],dp[i-j]+dp[j]+m); } } printf("%d ",dp[n]); } }