划分dp

把环变链(读入4 3 -1 2变成4 3 -1 2 4 3 -1 2)

设dp[i][j][k]为把i~j分成k份,各部分内的数字相加,相加所得的k个结果对10取模后再相乘,最终得到的一个数,这个数的最大或最小值。

dp[i][j][k]=max/min{dp[i][p][k-1]+func(p+1,j)}

i+k-2<=p<=j-1  func(i,j)=(sum(i,j)%10+10)%10

(注意有负数取余,这样写:(x%10+10)%10 )

边界:dp[i][j][1]=func(i,j)

答案:max/min(dp[i][i+n-1][m])  i=1 to n+1

代码如下:

#include<iostream>
#define Max_n 55
#define Max_m 15
#define Max_int 1000000000
using namespace std; int dp1[Max_n*][Max_n*][Max_m];
int dp2[Max_n*][Max_n*][Max_m];
int a[Max_n*];
int s[Max_n*];
int n,m; inline int sum(int l,int r){ return s[r]-s[l-]; } inline int func(int l,int r){ return (sum(l,r)%+)%; } int main(){
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
s[]=;
for(int i=;i<=n*;i++){
s[i]=s[i-]+a[i];
} for(int i=;i<=n*;i++){
for(int j=i;j<=n*;j++){//边界
dp1[i][j][]=dp2[i][j][]=func(i,j);
}
}
for(int i=;i<=n*;i++){
for(int j=i;j<=n*;j++){
for(int k=;k<=m;k++){
dp1[i][j][k]=-Max_int;
dp2[i][j][k]=Max_int;
for(int p=i+k-;p<=j-;p++){
dp1[i][j][k]=max(dp1[i][j][k], dp1[i][p][k-]*func(p+,j));
dp2[i][j][k]=min(dp2[i][j][k], dp2[i][p][k-]*func(p+,j));
}
}
}
} int ans1=-Max_int;
int ans2=Max_int;
for(int i=;i<=n+;i++){
ans1=max(ans1,dp1[i][i+n-][m]);
ans2=min(ans2,dp2[i][i+n-][m]);
}
cout<<ans2<<endl<<ans1<<endl; return ;
}

最新文章

  1. Appium环境搭建+cordova
  2. Unable to locate secure storage module异常的解决方案
  3. 简单SSM配置详解
  4. 【转】Oracle集合操作函数:union、intersect、minus
  5. windows分屏
  6. Flex xxx-app.xml配置
  7. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
  8. 使用ant自动编译、打包生成apk文件
  9. C#5 复习总结循环 迭代和穷举
  10. java加解密
  11. [算法] trie树实现
  12. iOS开发添加pch文件
  13. 权限管理系统之SpringBoot集成LayUI实现后台管理首页
  14. Windows 10 远程连接出现函数错误 【这可能由于CredSSP加密Oracle修正】
  15. laravel整合vue 多入口解决
  16. jquery表单提交的新写法
  17. java生成zip压缩文件,解压缩文件
  18. app 开发
  19. go-simplejson文档学习
  20. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-10底层驱动之I2C

热门文章

  1. TCP/IP网络编程系列之四(初级)
  2. 解决win下无法ping通VM虚拟机CentOS系统的方法
  3. 阻塞队列之四:ArrayBlockingQueue
  4. laravel5中添加自定义函数
  5. 超详细的php用户注册页面填写信息完整实例(附源码)
  6. canvas之画一个三角形
  7. Windows下安装GCC
  8. SHUTDOWN: waiting for active calls to complete
  9. 从windows拷贝到linux的脚本报错:未找到命令 or 语法错误
  10. A start job is running for /etc/rc.d/rc.local ... ... no limit