Description

请注意本题的数据范围。

Input

Output

Sample Input

2
2
15 19
3
30 40 20

Sample Output

285
2600

Hint

数据范围:
30% n<=9
100% n,a<=100, T<=5

Source

动态规划 /DFS /分治

题解:

  区间DP裸题,注意a可以等于100.

代码:

  

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 1000
#define ll long long
#define mod 100
using namespace std;
ll a[MAXN],b[MAXN][MAXN],dp[MAXN][MAXN],num[MAXN][MAXN];
int n; ll getit(int x,int y){
ll ans=;
if(x>y) swap(x,y);
if(y-x==) return a[x];
for(int i=x;i<=y;i++) ans=ans+a[i],ans%=mod;
return ans;
} void pre(){
memset(num,,sizeof(num));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
num[i][j]=num[j][i]=getit(i,j);
}
} ll DP(int l,int r){
if(r-l+==) return ;
if(l>r) return 1ll<<;
if(b[l][r]) return dp[l][r];
b[l][r]=;
for(int k=l;k<=r;k++){
ll ret=1ll<<;
ret=DP(l,k)+DP(k+,r)+num[l][k]*num[k+][r];
dp[l][r]=min(dp[l][r],ret);
}
return dp[l][r];
} void work(){
cin>>n;
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
pre();
memset(dp,,sizeof(dp));
memset(b,,sizeof(b));
printf("%lld\n",DP(,n));
} int main()
{
int t;cin>>t;
while(t--){
work();
}
return ;
}

最新文章

  1. .NET Core Analysis
  2. C#面向对象编程进阶(一) ——实现栈
  3. iOS - UIButton
  4. mysql group by 用法解析(详细)
  5. n行m列的网格中含有的矩形数
  6. Java设计模式学习笔记,二:工厂模式
  7. Java常用API
  8. eclipes快捷键
  9. 关于HTTP GET &amp; POST的区别(转)
  10. C++ 传参时传内置类型时用传值(pass by value)方式效率较高
  11. tomcat多实例
  12. CentOS6文件系统思维导图
  13. PHP调用WCF提供的方法
  14. 6.824 Lab 5: Caching Extents
  15. 2018.09.15 秘密的牛奶管道SECRET(次小生成树)
  16. C#数据库连接方法
  17. js jq封装ajax方法
  18. Python之反射练习
  19. python教程(三)&#183;自定义函数
  20. cobbler-web 网络安装服务器套件 Cobbler(补鞋匠)

热门文章

  1. 通过脚本实现将服务器的Log实时传送到Telegram群组
  2. 049 模块6-wordcloud库的使用
  3. 【最新】破解微信小程序,获取微信小程序源码,破解微信wxapkg,仅需5秒
  4. Python中使用moviepy进行视频分割
  5. 14 (OC)* UIView和UILayer
  6. Android远程服务AIDL开发过程中容易遇见的两个问题
  7. [Spark] 06 - What is Spark Streaming
  8. C++基础之动态内存
  9. 线控性能比拼,MKZ与CRV作为自动驾驶开发平台的全面测评
  10. LoadRunner11.安装破解