博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP 数字游戏
阅读量:5111 次
发布时间:2019-06-13

本文共 1370 字,大约阅读时间需要 4 分钟。

描述

丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。

格式

输入格式

输入文件第一行有两个整数,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有个整数,其绝对值不大于104,按顺序给出圈中的数字,首尾相接。

输出格式

输出文件有两行,各包含一个非负整数。第一行是你程序得到的最小值,第二行是最大值。

样例1

样例输入1

 
4 243-12

样例输出1

 
781

限制

各个测试点1s,128MB

 

分析:

  f_max[i][j]表示前i个数,分成j分的最大值

  f_min[i][j]表示前i个数,分成j分的最小值

  下面给出两种转移顺序,第一种是错的,第二种是对的,两者只有顺序不同。。。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 typedef long long LL; 9 const LL MOD=10;10 const LL MAX_N=1000;11 const LL MAX_M=100;12 LL N,M;13 LL a[MAX_N];14 LL sum[MAX_N];15 LL b[MAX_N];16 LL f_max[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最大值 17 LL f_min[MAX_N][MAX_M];//f[i][j]前 i个数 ,分成 j部分的最小值18 void calc();19 void move_a(LL);20 LL MAX;21 LL MIN=0x3f3f3f3f;22 int main(){23 24 scanf("%lld%lld",&N,&M);25 for(LL i=1;i<=N;i++){26 scanf("%lld",&a[i]);27 b[i]=a[i];28 sum[i]=sum[i-1]+b[i];29 }30 31 calc();32 for(LL i=1;i<=M+1;i++){ //序列向后退 i个单位 33 move_a(i);34 calc();35 }36 37 cout<
<
<
<
N){82 now%=N;83 }84 b[now]=a[i];85 }86 for(LL i=1;i<=N;i++){87 sum[i]=sum[i-1]+b[i];88 }89 }

 

  

转载于:https://www.cnblogs.com/CXCXCXC/p/4779167.html

你可能感兴趣的文章
epoll示例
查看>>
[译]课程 11: 高级 (企业级) 特性
查看>>
两头大象的启示
查看>>
CSS实现隐藏滚动条同时又可以滚动
查看>>
Sql 2005数据库的sa密码忘记了怎么办?
查看>>
[转载] 字节单位换算
查看>>
顿悟了
查看>>
CTF-练习平台-Misc之 这么多数据包
查看>>
简易的不科学立直麻将学习笔记(1)-进攻策略-门清编-简单的两面听向做牌指南...
查看>>
Magento请求分发与控制器(二)
查看>>
Win7 桌面应用图标不见了
查看>>
博弈论 Sprague-Grundy函数 ——转
查看>>
Linux vim指令学习
查看>>
小和问题
查看>>
ios 国际化开发
查看>>
从onload和DOMContentLoaded谈起
查看>>
深入V8引擎-编译启动
查看>>
mysqli
查看>>
当前本地时间高精度
查看>>
PHP面试系列 之框架(二)---- 常见框架的特性
查看>>