关闭

[LibreOJ β Round]ZQC的拼图

338人阅读 评论(0) 收藏 举报
分类:

题目描述

ZQC 和他的妹子在玩拼图。她们有 n (1≤n≤100) n \ (1 \leq n \leq 100) n (1≤n≤100) 块神奇的拼图,还有一块拼图板。拼图板是一个 m×m (1≤m≤100) m \times m \ (1 \leq m \leq 100) m×m (1≤m≤100) 的正方形网格,每格边长为 1,如图所示。每块拼图都是直角三角形,正面为白色,反面为黑色,拼图放在拼图板上时,必须正面朝上,直角顶点必须与拼图板上的一个格点重合,两条直角边分别向左和向下。拼图可以重叠在一起。拼图的左下部分可以超过拼图板的边界,如图所示。

这些拼图有一个好,就是能伸缩,当然,拼图伸缩是要按基本法来的,具体说来就是:你可以选择一个正整数 kkk,并使所有拼图的每条边长都变成原来的 kkk 倍。

妹子摆好拼图后,ZQC 需要控制一个小人从拼图板的左下角跑到右上角,小人路线上的任何一点(包括端点)都要在某块拼图板上(边界或顶点也可以),现在 ZQC 想知道他的妹子最少要把拼图的边长扩大到原来的几倍才存在一种摆放方式使得他能找到这样一条路线。

DP

我们二分答案k,然后尝试判定。
对于一块拼图,如果直角顶点放在(x,y),能覆盖那些(x-x’,y-y’)呢?
我们不妨对于这个拼图的每一行选择最大的y’,这样得到n个(x’,y’)。
现在问题变成分组背包,每组至多选择一个二元组,使得第一维和为m,第二维和>=m。
就是这样。

#include<cstdio>
#include<algorithm>
#include<cmath>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
typedef double db;
const int maxn=100+10;
int f[maxn][maxn],a[maxn],b[maxn];
int i,j,k,l,r,mid,t,n,m;
db x,y;
bool check(int ans){
    fo(i,0,n)
        fo(j,0,m)
            f[i][j]=-1000000000;
    f[0][0]=0;
    fo(i,1,n){
        fo(j,0,min(ans/b[i],m)){
            x=(db)ans/a[i];
            //y=(db)((db)ans/b[i]-j)*((db)ans/a[i])/((db)ans/b[i]);
            y=(db)b[i]/a[i]*((db)ans/b[i]-(db)j);
            t=floor(y);
            fo(k,j,m)
                f[i][k]=max(f[i][k],f[i-1][k-j]+t);
        }
    }
    if (f[n][m]>=m) return 1;else return 0;
}
int main(){
    scanf("%d%d",&n,&m);
    fo(i,1,n) scanf("%d%d",&a[i],&b[i]);
    l=1;r=200000000;
    while (l<r){
        mid=(l+r)/2;
        if (check(mid)) r=mid;else l=mid+1;
    }
    printf("%d\n",l);
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

opencv实现拼图功能

简介   在使用美图秀秀之类工具的时候,发现了一个拼图功能,然后这里用opencv实现了类似效果。 实现原理 具体代码 #include #include #include #incl...
  • u011630458
  • u011630458
  • 2015-05-28 08:29
  • 2919

【Android基础】利用布局来拼图

这次我们来讲一个拼图的例子,主要讲解下相对布局。使用布局将下面的碎片排列成一张完整的图片: 完成效果图:
  • yabg_zhi_xiang
  • yabg_zhi_xiang
  • 2016-04-09 17:03
  • 2727

拼图算法分析...

From: http://blog.sina.com.cn/s/blog_6a4b57e30100mfch.html 一、题目说明:   (九宫问题)在一个3×3的九宫中有1-8这8个数及一个空格随...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2015-01-08 17:19
  • 1224

极验验证——滑块拼图验证码

如何使用: 首先要确认前端使用页面,比如登陆页面   1 2
  • cddcj
  • cddcj
  • 2016-09-13 09:55
  • 15859

opencv拼图算法

编程环境:VS2012+OpenCV2.4.6 功能: 第一种是将指定三幅图的指定位置的像素直接搬移到新的图像上 第二种是讲指定三幅图按照我们设定好的大小非等比缩放到第三幅图上 三张源图像 ...
  • wangzhebupt
  • wangzhebupt
  • 2014-01-09 15:14
  • 2090

javascript拼图算法

学了html5的拖拽事件,相信做出一款小小的拼图游戏也不难吧。就来说一下怎么用drag事件完成拼图游戏吧,当然html5的新方法在IE下是不兼容的。这里我把这个拼图游戏封装成一个小插件,感兴趣的话可以...
  • u014725878
  • u014725878
  • 2016-11-30 20:54
  • 540

九格智能拼图算法

最近想业余做一款android游戏,发现我国一款
  • axiaoquan
  • axiaoquan
  • 2014-05-08 16:45
  • 3029

HTML5 九宫格拼图游戏

设计思路 根据上面的效果图来观察思考,我们要做的就是设置一个大 DIV 用来包裹里面的小 DIV,然后在里面设置 8 个小 DIV,从 1 开始给他们编号。右边设置两个按钮,点击开始的时候开始计...
  • github_26672553
  • github_26672553
  • 2015-07-20 16:04
  • 4460

滑动拼图解锁

突发奇想把六位验证码登录换成滑动,后又想要加拼图解锁,苦于js技术与css技术实在是差,于是在网上找到了这个 网易云盾:点击打开链接 注册后登陆,找到下面我的产品,创建一个免费的验证码产品 ...
  • u012934723
  • u012934723
  • 2017-01-18 21:00
  • 3971

HTML5技术之图像处理:一个滑动的拼图游戏(转)

HTML5技术之图像处理:一个滑动的拼图游戏 HTML5有许多功能特性可以把多媒体整合到网页中。使用canvas元素可以在这个空白的画板上填充线条,载入图片文件,甚至动画效果。 在这篇文章中,我将做一...
  • dragoo1
  • dragoo1
  • 2015-07-01 19:29
  • 4564
    个人资料
    • 访问:327183次
    • 积分:11634
    • 等级:
    • 排名:第1512名
    • 原创:814篇
    • 转载:4篇
    • 译文:0篇
    • 评论:201条
    最新评论
    文章分类