多米诺骨牌
时间:2019-09-12
本文章向大家介绍多米诺骨牌,主要包括多米诺骨牌使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
多米诺骨牌有上下2个方块组成,每个方块中有1~6个点。现有排成行的
上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|。例如在图8-1中,S1=6+1+1+1=9,S2=1+5+3+2=11,|S1-S2|=2。每个多米诺骨牌可以旋转180°,使得上下两个方块互换位置。 编程用最少的旋转次数使多米诺骨牌上下2行点数之差达到最小。
对于图中的例子,只要将最后一个多米诺骨牌旋转180°,可使上下2行点数之差为0。
输入输出格式
输入格式:
输入文件的第一行是一个正整数n(1≤n≤1000),表示多米诺骨牌数。接下来的n行表示n个多米诺骨牌的点数。每行有两个用空格隔开的正整数,表示多米诺骨牌上下方块中的点数a和b,且1≤a,b≤6。
输出格式:
输出文件仅一行,包含一个整数。表示求得的最小旋转次数。
输入输出样例
输出样例#1:
1
分析:
本题是一道较难的DP题,但是可以通过对多米诺骨牌进行翻转从而实现将本题变为一道较为容易的背包DP,即用f[i][j]表示前i件物品能装到体积为j的最小重量
CODE(诡异的码风???显然不是我写的吗。。。):
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 #include<cstring> 5 #include<cmath> 6 #define rep(o,t,k) for(int o=t;o<=k;o++) 7 using namespace std; 8 int i,j,k; 9 int l,m,n,up,sum,inf,down,u[1200],d[1200],f[1200][20000]; 10 int main(){ 11 scanf("%d",&n); 12 rep(i,1,n) { 13 scanf("%d%d",&u[i],&d[i]); 14 up+=u[i];down+=d[i];sum+=u[i]+d[i]; 15 } 16 memset(f,62,sizeof(f));inf=f[0][0]; 17 f[0][up]=0; 18 rep(i,1,n) 19 rep(j,1,sum){ 20 if(j-u[i]+d[i]<0) continue; 21 f[i][j]=min(f[i-1][j],f[i-1][j+u[i]-d[i]]+1); 22 } 23 int p=99999,step; 24 for(int i=sum;i>=0;i--){ 25 if(abs(sum-i-i)<p&&f[n][i]<inf){ 26 p=abs(sum-i-i); 27 step=f[n][i]; 28 } 29 } 30 printf("%d",step); 31 return 0; 32 }
原文地址:https://www.cnblogs.com/kanchuang/p/11188251.html
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
- 黄荣奎:如何快速、便捷开发小程序
- 熊普江: BGP网络架构助力开发者快速构建、优化业务
- 唐良:云端架构给电商行业带来创新力
- 邹方明:看腾讯云如何架构海量存储系统
- 王之捷:AI智能云端架构大幅提升智能语音识别能力
- 精彩大放送 | 腾讯云:容器架构向无服务架构的演进
- Python 数据分析学习笔记
- 如何用Fiddler抓取https
- 人工智能与大数据结合,帮助降低自杀率
- “多态”的数据库连接池实现
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- 用js代码理解区块链,最简版本
- 谈谈IE针对Ajax请求结果的缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 程序员必备CDN加速jsDelivr+Gihub远程仓库
- java_方法的定义、调用、重载
- Oracle参数解析(nls_calendar)
- java_List、Set、Conllections工具类
- Oracle参数解析(OPEN_CURSORS)
- java_Collection、Map、泛型的使用
- java_线程、同步、线程池
- Oracle参数解析(nls_timestamp_format)
- Vue使用uuid-npm快速生成uuid,适用于多种场景
- WPF调用图片或资源(Uri)
- Hexo部署远程仓库(Conding、Gitee、Github)
- Linux下安装nginx
- CSS简笔画logo系列:纯CSS绘制“Adidas” Logo
- Electron + Vue跨平台桌面应用开发实战教程(一)
- java_抽象类、接口、多态的使用