题目链接:(数据加强后wa了)

hdu 5355


题目大意:

给出一个蛋糕。切成1~n大小的n块。问是否能在不继续分割的情况下拼凑出m等份。


题目分析:

  • 首先我们是可以知道每份蛋糕的尺寸的,利用n*(n+1)/2m可以算出来,假设不能整除的话,那么一定无解。

  • 然后我们考虑怎样构造一组解,对于一块蛋糕,我想到了一个贪心策咯,尽量选择最大块的蛋糕,由于假设能选可是不选这块蛋糕,那么也一定是通过选取小块的蛋糕来拼凑出这块蛋糕的大小,可是假设小的拼凑出了这块,那么就不能用于拼凑其它的蛋糕,显然选择最大的这块是最优的,由于他不可能被用来拼凑出其它的蛋糕。所以当前选取它不会造成其它的蛋糕拼凑受影响,所以我们这样选取一定是正确的。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <algorithm> using namespace std;
typedef long long LL;
int t;
LL n,m;
vector<int> v[20];
int mark[100007]; int main ( )
{
scanf ( "%d" , &t );
while ( t-- )
{
memset ( mark , 0 , sizeof ( mark ));
for ( int i = 0 ; i < 20 ; i++ )
v[i].clear();
scanf ( "%I64d%I64d" , &n , &m );
LL ans = n*(n+1)/2;
LL num = ans/m;
if ( ans%m || num < n )
{
puts ( "NO" );
continue;
}
LL r = n;
int i;
for ( i = 0 ; i < m ; i++ )
{
//cout <<n << " " << num << " "<< i << " " << r << endl;
LL temp = num;
bool flag = true;
while ( mark[r] && r > 1 ) r--;
while ( temp >= r && !mark[r] )
{
v[i].push_back ( r );
mark[r] = true;
temp -= r;
r--;
if ( r == 0 ) break;
while ( mark[r] && r > 1 ) r--;
}
if ( temp == 0 )
{
flag = false;
}
else if ( !mark[temp] )
{
v[i].push_back ( temp );
mark[temp] = true;
flag = false;
}
else
{
while ( true )
{
bool finish = false;
for ( int j = temp ; j > 0 ; j-- )
{
if ( !mark[j])
{
mark[j] = true;
v[i].push_back ( j );
temp -= j;
finish = true;
break;
}
}
if ( !finish ) break;
if ( temp == 0 )
{
flag = false;
break;
}
}
}
if ( flag ) break;
}
if ( i == m )
{
puts ( "YES" );
for ( int i = 0 ; i < m ; i++ )
{
printf ( "%d" , v[i].size() );
for ( int j = 0 ; j < v[i].size() ; j++ )
printf ( " %d" , v[i][j] );
puts ( "");
}
}
else puts ( "NO" );
}
}

多校第六场 1003 hdu 5355 Cake(贪心)的更多相关文章

  1. 【HDU】4923 Room and Moor(2014多校第六场1003)

    Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  2. 2015多校第6场 HDU 5355 Cake 贪心,暴力DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给你n个尺寸大小分别为1,2,3,…,n的蛋糕,要求你分成m份,要求每份中所有蛋糕的大小之 ...

  3. 2014多校第七场1003 || HDU 4937 Lucky Number

    题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数 ...

  4. 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)

    题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...

  5. 2014多校第六场 1007 || HDU 4927 Series 1(杨辉三角组合数)

    题目链接 题意 : n个数,每操作一次就变成n-1个数,最后变成一个数,输出这个数,操作是指后一个数减前一个数得到的数写下来. 思路 : 找出几个数,算得时候先不要算出来,用式子代替,例如: 1 2 ...

  6. 2014多校第六场 1005 || HDU 4925 Apple Tree

    题目链接 题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两 ...

  7. HDU 5355 Cake

    HDU 5355 Cake 更新后的代码: 今天又一次做这道题的时候想了非常多种思路 最后最终想出了自觉得完美的思路,结果却超时 真的是感觉自己没救了 最后加了记忆化搜索,AC了 好了先说下思路吧.不 ...

  8. HDU 5355 Cake(2015多校第六场,搜索 + 剪枝)

    Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Sub ...

  9. 多校第六场 HDU 4927 JAVA大数类+模拟

    HDU 4927 −ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊.如今对组合算比較什么了-- import java ...

随机推荐

  1. poi 和jxl导出excel(2)

    controller: /** * 导出报表 * @return */ @RequestMapping(value = "/export") @ResponseBody publi ...

  2. linux 查看内存和cpu

    Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...

  3. 【转】Linux命令学习手册-split命令

    转自:http://blog.chinaunix.net/uid-9525959-id-3054325.html split [OPTION] [INPUT [PREFIX]] [功能]将文件分割成多 ...

  4. favourite和favorite的区别

    同一个词,英式和美式的拼写法而已.通常英式英语里的-our-字母组合,到了美式英语里面都成了-or-字母组合,最常见的有英式的 colour,到美式英语成了 color.

  5. Spring Cloud (6) 分布式配置中心-高可用

    高可用 现在已经可以从配置中心读取配置文件了,当微服务很多时都从配置中心读取配置文件,这时可以将配置中心做成一个微服务,将其集群化,从而达到高可用. 改造config-server 加入eureka ...

  6. UE4 集成讯飞听写插件

    搞了几天,有些坑记录一下. 3个方面的知识需要学习 1.制作UE4插件 2.引入第三方库 3.讯飞听写的api 一看是参考 https://blog.csdn.net/u012793104/artic ...

  7. Algebrizer

    Microsoft SQL Server 2012 Internals 把 SQL 语句的处理分为四个阶段,分别是 解析.绑定.优化.执行,如图所示:     解析(Parse)主要是语法分析,比较简 ...

  8. Mac下CUDA开启及Tensorflow-gpu 1.4 安装

    本文由@ray 出品,转载请注明出处.  文章链接:http://www.cnblogs.com/wolfray/p/8040694.html 在之前的文章中,笔者介绍了在Mac下安装Tensorfl ...

  9. 初学JSP_内置对象

    out内置对象: 表单,表单常用的的提交方式

  10. Linux基础篇(1)

    1.计算机硬件的五大单元 五大单元:输入单元,输出单元,CPU内部的控制单元,算术逻辑单元与内存等五大部分. (Ps:CPU实际要处理的数据完全来自于内存) 2.计算机上常用的计算单位 (1)容量单位 ...