这个题与http://blog.csdn.net/anqier0468/article/details/9863063状态转移方程是一个思路,只不过因为每两种颜色混合会产生一个新结果,要用另一个数组保存这个值。
#include<cstdio>
#include<iostream>
#include<cstring>
#define MAXN 103
#define LL long long
using namespace std;
LL d[MAXN][MAXN],num[MAXN],a[MAXN][MAXN];
int main()
{
//freopen("in.txt","r",stdin);
int n;
while(cin>>n)
{
memset(d,0,sizeof(d));
memset(num,0,sizeof(num));
memset(a,0,sizeof(a));
for(int i=1; i<=n; i++)
{
cin>>num[i];
a[i][i]=num[i];
}
int len,i,k;
for( len=1; len<n; len++)
{
for( i=1; i+len<=n; i++)
{
d[i][i+len]=0x7fffffff;
for(k=i; k<i+len; k++)
{
a[i][i+len]=((a[i][k]%100)+(a[k+1][i+len]%100))%100;
int num=a[i][k]*a[k+1][i+len]+d[i][k]+d[k+1][i+len];
if(num<d[i][i+len])
d[i][i+len]=num;
}
}
}
cout<<d[1][n]<<endl;
}
return 0;
}