平方和

P1436 棋盘分割[dp]

孤者浪人 提交于 2019-12-01 08:39:12
题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的平方和最小。 请编程对给出的棋盘及n,求出平方和的最小值。 解析 \(dp[k][i][j][x][y]\) 表示当前在切第k刀,当前切 \((i,j)\) 为左上角, \((x,y)\) 为右下角的矩形的最小平方和。 考虑状态转移,一个状态转移到下一个时,它可以继续往两个部分切下去,也就是往两个方向转移。 采用前缀和优化,其中 \(calc(i,j,x,y)\) 表示以 \((i,j)\) 为左上角, \((x,y)\) 为右下角的矩形的和的平方。 \[ dp[k][i][j][x][y]=min(dp[k][i][j][x][y],dp[k-1][i'+1][j][x][y]+calc(i,j,i',y), \\dp[k-1][i][j][x'][y]+calc(x'+1,j,x,y)) \] \[ dp[k][i][j][x][y]=min(dp[k][i][j][x][y],dp[k-1][i][j'+1][x][y

P1436 棋盘分割

你说的曾经没有我的故事 提交于 2019-11-30 20:03:18
题目背景 无 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行) 原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成n块矩形棋盘,并使各矩形棋盘总分的平方和最小。 请编程对给出的棋盘及n,求出平方和的最小值。 输入格式 第1行为一个整数n(1 < n < 15)。 第2行至第9行每行为8个小于100的非负整数,表示棋盘上相应格子的分值。每行相邻两数之间用一个空格分隔。 输出格式 仅一个数,为平方和。 输入输出样例 输入 #1 3 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 3 输出 #1 1460 思路 作者: I_AM_HelloWord 嗯,看数据范围这么小,肯定搞一堆循环暴力dp。 推式子应该不是太难,设dp[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和。 那么初始化就是dp[1][i][j][p][q]

0.0

孤街浪徒 提交于 2019-11-28 21:33:10
---恢复内容开始--- 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I—2019秋作业05 我在这个课程的目标是 更加深层次了解C语言 这个作业在那个具体方面帮助我实现目标 实践动手能力 参考文献 Markdown基本语法 1PTA作业 1代码互评 水仙花数判断:本题要求实现一个函数,判断任一整数是否为水仙花数(必须是三位数,且数的每一位上数字的立方和与数本身相等)。例如153=1^3+5^3+3^3=1+125+27=153,而1或155则不是水仙花数。如果是水仙花数,则函数返回1,否则返回0. 我的代码 同学代码 我的代码是先求出来百位,十位,个位数字后,在进行立方和相加。 他是利用循环求余一次循环求一个值的3次方 我的代码改四位数的话新增一个变量 例如 q q/=1000 能求千位上的数字 以此类推 1 .1判断一个整数的各位数字平方之和能否被5整除 编写函数fun,其功能是:判断一个整数的各位数字平方之和是否被5整除,可以被5整除则返回1,否则返回0 1.1.1数据处理 数据表达:定义了整形变量ans,用ans += (n%10)*(n%10)计算一个整数的个位数字平方之和。 数据处理:主调函数的名称main,被调函数的名称fun,被调函数的类型为整型。 1.1.2实验代码截图 1.1.3造测试数据 输入数据 输出数据 说明 35 0