1. 程式人生 > >51nod1021 石子歸併(動態規劃)

51nod1021 石子歸併(動態規劃)

簡單模板題

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int INF=1e9+7;
int dp[1005][1005],num[1005];
int main()
{
	int n;
	cin>>n;
	int i,j,len,k;
	for(i=0;i<=n;i++)
		for(j=0;j<=n;j++)
			dp[i][j]=(i==j?0:INF);
	num[0]=0;
	for(i=1;i<=n;i++)
	{
		cin>>num[i];
		num[i]+=num[i-1];
	}
	for(len=2;len<=n;len++)
	{
		for(i=1;i<n;i++)
		{
			j=len+i-1;
			if(j<=n)
				for(k=i;k<j;k++)
					dp[i][j]=min(dp[i][j],dp[k+1][j]+dp[i][k]+num[j]-num[i-1]);
		}
	}
	cout<<dp[1][n]<<endl;
	return 0;
}