能看看哪里错了?
#include <iostream> using namespace std; int N , K , L; int num[20010]; int sum[20010]; int f[20010][108]; int g[20010][108]; inline int MIN(int a , int b) { return a > b ? b : a; } int main() { int T; scanf(\"%d\" , &T); while(T --) { scanf(\"%d%d%d\" , &N , &K , &L); int i , j; for(i = 1 ; i <= N ; i ++) { scanf(\"%d\" , &num[i]); sum[i] = sum[i-1] + num[i]; } memset(f , 0 , sizeof(f)); for(i = 1 ; i <= N ; i ++) { f[i][1] = sum[i]; g[i][1] = f[i][1] - sum[i]*2; } for(i = L+1 ; i <= N ; i ++) g[i][1] = MIN(g[i][1] , g[i-1][1]); for(i = 1 ; i <= N ; i ++) { for(j = 2 ; j <= i / L && j <= K ; j ++) { f[i][j] = g[i][j-1] + sum[i]*j; g[i][j] = f[i][j] - sum[i]*(j+1); if(i > j*L) g[i][j] = MIN(g[i-1][j] , g[i][j]); } } int res = f[N][1]; for(i = 1 ; i <= N / L ; i ++) res = MIN(f[N][i] , res); printf(\"%d\\n\" , res); } return 0; }