大理石分割(动态规划)

有若干块大理石,其大小及美观程度不一,为了比较客观的分割这些大理石,我们需要先给这些大理石一个评分,评分分为6个等级,分别用1~6的数字来表示。现希望将这些大理石分成两部分,使每部分的评分之和相同。
输入:
输入一行,包括6个数,分别是每个等级的大理石的数量。每种等级的大理石数量不超过20000.
输出:
如果这些大理石能否分割成评价等级之和相同的两部分,则输出true,否则输出false.
样例输入:
1 0 1 2 0 0
样例输出:
false

算法分析

试想如果可以分配,那么是否可以找到一种分配方案使得使用得大理石数量最少。如此,该问题,就变成了货币兑付问题。
就该问题,以score【6】来保存各等级大理石得输卵不过,均值avg=sum/2=6;所以后面以用6种面值得货币(大理石)来兑付avg价值的货币来进行描述:
动态规划表如下表所示:

其中最左列表示0-6种纸币,其价值分别为0-6,行为0-avg的价值的纸币需要兑付的,因为其中avg为6.
首先初始第2列为0,第一行为∞。数量不够即表示该价值的纸币不能被兑付以无穷表示。
现在开始填第3行,首先填第3行3列即v【1,1】,用前1种纸币来兑付价值为1的纸币,第一种其数量可选为0-1,当为0时,使用的数量为0+V【0,1-01】=∞,当为1时,使用的数量为1+V【0,1-11】=1。故V【1,1】=1,同理v[1,2]时,第1种货币的数量仍为0-1,当为0时,使用的数量为0+V【0,2-01】=∞,当为1时数量为1+V【0,2-11】=∞,所以V【1,2】=∞。同理填完第3行。
接下来填第4行,首先填4行3列,V【2,1】,用前2种货币来兑付价值为1的纸币,第2种货币其数量可选为0,故V【2,1】=0+V【1,1-0*2】=1,同理V【2,2】=∞,以此填完所有的。

最后,由于我们的目的是为了兑付价值为6的纸币可是V【i,6】始终为∞,所以不可兑付。即不可均等分割。同理当V【i,6】不是∞时证明可分割,动态规划即可结束。
至于分配方案,读者可以自行思考一下。可以借鉴0-1背包动态规划。

代码

#include <stdio.h>
#define MAX 10000
int score[6]={0,1,2,0,0,0};
int avg;
int predict()
{
int V[7][avg+1];
/*
初始化,MAX为无穷
/
for(int i=1;i<avg+1;i++)V[1][i]=MAX;
for(int i=1;i<7;i++)V[i][1]=0;
//填表
for(int i=2;i<7;i++)
for(int j=2;j<avg+1;j++)
{
int min=MAX;
for(int k=0;k<score[i];k++)
{
if(k+V[i-1][j-i
k]<min)min=k+V[i-1][j-i*k];
}
V[i][j]=min;
}
//判断是否可分割
for(int i=2;i<7;i++)
if(V[i][avg]<MAX)
{
printf(“true”);
return 1;
}
printf(“false”);
}
int main(int argc, char argv[])
{
int sum=0;
for(int i=0;i<6;i++)
{
sum+=score[i]
(i+1);
}
if(sum%2)printf(“false”);
else{
avg=sum/2;
predict();
}
return 0;
}

大理石分割(动态规划)相关推荐

  1. 大理石分割(回溯法)

    大理石分割 题目描述 有若干块大理石,其大小及美观程度不一,为了比较客观的分割这些大理石,我们需要先给这些大理石一个评分,评分分为6个等级,分别用1~6的数字来表示.现希望将这些大理石分成两部分,使每 ...

  2. 钢条分割 动态规划java_【动态规划】初识,钢条切割问题

    正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...

  3. POJ-1191 棋盘分割 动态规划

    详见代码: #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath&g ...

  4. 腾讯游戏客户端开发公开课面试心得

    沉浸在我是fw的忧伤之中写下这篇文章,呜呜. 笔试 8月的时候,朋友推荐我去报名腾讯游戏公开课,里面包含三个方向:策划.运营和客户端开发.我报了客户端开发,但是过了一个月之后才收到笔试通知,收到通知的 ...

  5. Java算法:牛客网小米笔试真题算法Java版1-40题

    题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...

  6. c4d安装没有出现语言文字,c4d中文教程大合集 HDT映速教程 C4D自学全攻略(四部全集)...

    C4D教程大合集中文教程中文字幕IHDT映速教程C4D全攻略(四部全集) 01_蓝书:入门 02_绿书:进阶 03_橙书:室内渲染 04_角色动画 本教学采用最新的R14版本,通俗易懂地详尽介绍CIN ...

  7. OCR技术简介.md

    光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程.亦即将图像中的文字进行识别,并以文本的形式返回. ...

  8. 题解:2022年暑假ACM热身练习2

    好久没写题解了,自从天梯赛以后敲代码就很少了,院赛手也是很生,这一次就当做是找找状态,有些题还是有点难度的,或者说有点坑(感觉有些题放3个月前还对我不是问题...太久没做题题感直接下来了),分享一下下 ...

  9. 【BZOJ1048】分割矩阵(记忆化搜索,动态规划)

    [BZOJ1048]分割矩阵(记忆化搜索,动态规划) 题面 BZOJ 洛谷 题解 一个很简单的\(dp\),写成记忆化搜索的形式的挺不错的. #include<iostream> #inc ...

最新文章

  1. MyBatis中使用流式查询避免数据量过大导致OOM
  2. Keil 函数内联 inline
  3. 诺基亚Lumia 800生产背后的故事——萨罗工厂[多图]
  4. fork() || fork()和fork() fork()笔试题
  5. Dosbox汇编环境下debug常用调试命令(二)
  6. lucene api
  7. mysql oracle 表空间大小_Oracle各种空间大小及占用大小
  8. 13. 永无止境:网站的伸缩性架构
  9. loss 加权_Multi-Similarity Loss使用通用对加权进行深度度量学习-CVPR2019
  10. Windows下sqlmap安装方法
  11. LDO与电压基准源的精度对比
  12. 自然语言处理国内外著名会议、期刊
  13. 国内外已知SAR卫星相关信息整理(持续更新-2022.9.6)
  14. (收藏自己看)程序员的工作不能用“生产效率”这个词来衡量
  15. MySql:学生表、教师表、课程表、分数表 练习
  16. Google Chrome插件开发-Context Menus
  17. 白领加薪升迁九大高招
  18. 人人都能学会系列之ThreadLocal
  19. hbuilder配置浏览器 设置编辑器默认浏览器
  20. 野火FPGA-状态机

热门文章

  1. 怎样选数据分析培训机构,靠谱的数据分析培训机构有哪些
  2. java相关面试总结
  3. mysql stdistance_SQL Server 利用 geography 计算地理位置距离、距我最近排序
  4. 互联网金融诈骗不缺受害者, 有人刚被3M坑了又投入CA
  5. 在 Java 中检查空字符串或空白字符串
  6. flume1.9自定义hbaseSink(实际是自定义序列化类)
  7. 3d album android下载,声影制作家3D-Album
  8. 06.奇特的一生评语
  9. 怎样制作网站的流程和步骤
  10. python day 07