转载请注明出处:http://blog.csdn.net/a1dark
分析:动态规划、降维
#include<stdio.h> int dp[1005][1005]; int main() { int n,k; int w[1005]; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&w[i]); } int temp=w[1]; for(int i = 1; i <= k; i++) { int max = dp[i - 1][1] - w[1]; for(int j = 2; j <= n; j++) { dp[i][j] = dp[i][j - 1] > (max + w[j]) ? dp[i][j - 1] : (max + w[j]); int tmp = dp[i - 1][j] - w[j]; max = tmp > max ? tmp : max; } } printf("%d\n", dp[k][n]); } return 0; }