Description
n
个人轮流上台表演,每个人有一个屌丝值
Input
第一行一整数
Output
输出这 n 的人的总不高兴值的最小值
Sample Input
2
5
1
2
3
4
5
5
5
4
3
2
2
Sample Output
Case #1: 20
Case #2: 24
Solution
枚举第
l
个人的上场次序,如果第
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 111
int T,n,a[maxn],sum[maxn],dp[maxn][maxn];
int dfs(int l,int r)
{
if(l>=r)return 0;
if(dp[l][r]!=-1)return dp[l][r];
dp[l][r]=INF;
for(int i=l;i<=r;i++)
dp[l][r]=min(dp[l][r],(i-l)*a[l]+dfs(l+1,i)+dfs(i+1,r)+(i-l+1)*(sum[r]-sum[i]));
return dp[l][r];
}
int main()
{
int res=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
sum[0]=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
memset(dp,-1,sizeof(dp));
printf("Case #%d: %d\n",res++,dfs(1,n));
}
return 0;
}