code1085 数字游戏
划分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 ;
}
code1085 数字游戏的更多相关文章
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- NOIP2003pj数字游戏[环形DP]
题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分 ...
- Codevs 1229 数字游戏
1229 数字游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description Lele 最近上课的时候都很无聊,所以他发明了 ...
- codevs 1229 数字游戏(可重集的全排列)
传送门 Description Lele 最近上课的时候都很无聊,所以他发明了一个数字游戏来打发时间. 这个游戏是这样的,首先,他拿出几张纸片,分别写上0到9之间的任意数字(可重复写某个数字),然后 ...
- XDU 1161 - 科协的数字游戏II
Problem 1161 - 科协的数字游戏II Time Limit: 1000MS Memory Limit: 65536KB Difficulty: Total Submit: 112 ...
随机推荐
- C#如何:启用和禁用自动绑定重定向 (微软)
https://msdn.microsoft.com/zh-cn/library/2fc472t2.aspx 如何:启用和禁用自动绑定重定向 .NET Framework (current versi ...
- 以Linux下的测试程序说明递归型互斥量和普通互斥量的区别
先贴代码和测试结果 // Mutex.h: 对pthread的互斥量的RAII包装 #ifndef _MUTEX_H_ #define _MUTEX_H_ #include <stdio.h&g ...
- MySQL查询优化器工作原理解析
手册上查询优化器概述 查询优化器的任务是发现执行SQL查询的最佳方案.大多数查询优化器,包括MySQL的查询优化器,总或多或少地在所有可能的查询评估方案中搜索最佳方案.对于联接查询,MySQL优化器所 ...
- ROS HTB限速失败原因分析和需注意事项
要想做限速,必须要知道以下几点: 首先要知道自己要限制什么的速度,谁的速度,于是需要用的标记,即Mangle. 其次要知道怎么限速,是限制上传,还是下载? 最后要知道所做的限速是否成功,即需要知道如何 ...
- 【UVALive】3695 Distant Galaxy(......)
题目 传送门:QWQ 分析 好喵啊~~~~ 不会做 正解看蓝书P53吧 代码 #include <cstdio> #include <algorithm> using name ...
- JS中的面向对象
创建对象的几种常用方式: 1,使用Object或对象字面量创建对象. 2,工厂模式创建对象. 3,构造函数模式创建对象. 4,原型模式创建对象. 使用Object或对象字面量创建对象: var stu ...
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...
- C++Primer笔记-----day05
=======================================================================day05======================== ...
- Angularjs Ng_repeat中实现复选框选中并显示不同的样式
最近做了一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的: 简单的效果如图所示: 首先看一下html代码: 1 <!DOCTYPE h ...
- 修改SecureCRT终端的Home和End功能键。
SecureCRT真是个不错的ssh客户端工具,但在使用时发现跟自己的一些使用习惯不符合,例如home.end.pageup.pagedown和delete等键. 默认情况下一些按键的功能如下: pa ...