1、http://poj.org/problem?id=1738
参考百度文库:http://wenku.baidu.com/view/adac87bbfd0a79563c1e726a.html
2、
Time Limit: 5000MS | Memory Limit: 30000K | |
Total Submissions: 2278 | Accepted: 543 |
Description
Input
Output
Sample Input
1 100 3 3 4 3 4 1 1 1 1 0
Sample Output
0 17 8
3、wrong 代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 50005 #define MAX 0x7fffffff int stone[N]; int sum[N]; int dp[N][N]; int main() { int n,add; while(scanf("%d",&n)!=EOF) { if(n==0) break; for(int i=0; i<n; i++) scanf("%d",&stone[i]); sum[0]=stone[0]; for(int i=1;i<n;i++) { sum[i]=sum[i-1]+stone[i]; } for(int i=0;i<n;i++) dp[i][i]=0; for(int v=1;v<n;v++) { for(int i=0;i<n-v;i++) { int j=i+v; dp[i][j]=MAX; if(i>0) add=sum[j]-sum[i-1]; else add=sum[j]; for(int k=i;k<j;k++) { dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+add); } } } printf("%d\n",dp[0][n-1]); } return 0; }