题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355

题意:给你n个尺寸大小分别为1,2,3,…,n的蛋糕,要求你分成m份,要求每份中所有蛋糕的大小之和均相同,如果有解,输出“YES”,并给出每份的蛋糕数及其尺寸大小,否则输出“NO”

例如n=5,m=3,即大小尺寸分别为1,2,3,4,5的5个蛋糕,要求分成三份,那么解可以是第一份一个蛋糕,大小为5;第二份两个蛋糕,大小为1、4;第三份两个蛋糕,大小为2、3。这样每份大小之和均为5,满足题目要求。

解法:首先得放一下这个题解:http://blog.csdn.net/queuelovestack/article/details/47321211 写的很好,这个问题的关键点在于判断出有合法方案时,我们可以将这些蛋糕按照2*m为单位一组一组的分配,每个人拿当前这组的最大最小,次大次小。。。

然后做完这个过程直到剩余[0,4*m],这个看代码就知道了。对于这个区间的值就直接爆搜即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
typedef long long LL;
vector <int> ans[15];
LL sumv[15], cake[maxn];
bool vis[maxn];
LL n, m, dis, res;
//[0-4*m]的DFS bool dfs(int cur, int sum, int pos)
{
if(cur == m+1) return true;
for(int i=res; i>=pos; i--){
if(vis[i]) continue;
if(sum+i==dis){
cake[i]=cur;
vis[i]=1;
if(dfs(cur+1,0,1)) return true;
vis[i]=0;
return false;
}
else if(sum+i<dis){
cake[i]=cur;
vis[i]=1;
if(dfs(cur,sum+i,i+1)) return true;
vis[i]=0;
}
}
return false;
} int main()
{
int T;
scanf("%d", &T);
while(T--){
scanf("%lld%lld", &n,&m);
memset(sumv, 0, sizeof(sumv));
memset(vis, false, sizeof(vis));
memset(cake, 0, sizeof(cake));
for(int i=0; i<=m; i++){
ans[i].clear();
}
LL sum = n*(n+1)/2;
if(sum%m!=0){
puts("NO");
continue;
}
LL ave = sum/m;
if(ave < n){
puts("NO");
continue;
}
puts("YES");
res = n%(2*m);
//23%(12)=11
if(res!=0){
res += 2*m;
//res=11+12=23
res = min(res, n);
}
//
//23 6
int a,b;
for(int i=n; i>res; i-=(2*m)){
for(int k=1; k<=m; k++){
a=i-k+1,b=i-(2*m)+k;//
//23 12
//22 13
//...
ans[k].push_back(a);
ans[k].push_back(b);
sumv[k]+=a, sumv[k]+=b;
}
}
dis = ave - sumv[1];
dfs(1, 0, 1);
for(int i=1; i<=res; i++){
ans[cake[i]].push_back(i);
}
for(int i=1; i<=m; i++){
int sz = ans[i].size();
printf("%d", sz);
for(int j=0; j<sz; j++){
printf(" %d", ans[i][j]);
}
puts("");
}
}
return 0;
}

2015多校第6场 HDU 5355 Cake 贪心,暴力DFS的更多相关文章

  1. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  2. 2015多校第6场 HDU 5353 Average 贪心,细节处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353 题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块.现在有三种操作:第i个人给 ...

  3. 多校第六场 1003 hdu 5355 Cake(贪心)

    题目链接:(数据加强后wa了) hdu 5355 题目大意: 给出一个蛋糕.切成1~n大小的n块.问是否能在不继续分割的情况下拼凑出m等份. 题目分析: 首先我们是可以知道每份蛋糕的尺寸的,利用n*( ...

  4. 2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m<=1e5) 解法:很经典的套路,和这题一样:h ...

  5. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  6. 2015多校第6场 HDU 5358 First One 枚举,双指针

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358 题意:如题. 解法:观察式子发现,由于log函数的存在,使得这个函数的值域<=34,然后我 ...

  7. 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5405 题意: 给你一棵n个节点的树,有点权.        要求支持两种操作: 操作1:更改某个节点的 ...

  8. 2015多校第8场 HDU 5382 GCD?LCM! 数论公式推导

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5382 题意:函数lcm(a,b):求两整数a,b的最小公倍数:函数gcd(a,b):求两整数a,b的最 ...

  9. 2015多校第7场 HDU 5378 Leader in Tree Land 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:一棵n个节点的树.对其节点进行标号(1~n).求恰好存在k个节点的标号是其节点所在子树的最 ...

随机推荐

  1. 【bzoj1775】[Usaco2009 Dec]Vidgame 电视游戏问题 dp

    题目描述 输入 * 第1行: 两个由空格隔开的整数: N和V * 第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游 戏.包含: P_i, G_i还有G_i对由空格 ...

  2. 状态压缩---UVA6625 - Diagrams & Tableaux

    比赛的时候刷出来的第一个状态DP.(期间有点没有把握是状态DP呢.) 题意:题意还是简单的.K行的方格.之后输入L1~LK 代表每一行方格数.在这些往左紧挨的方格子里填上1~N的数字. 其中右边格子的 ...

  3. 【题解】CF#833 B-The Bakery

    一个非常明显的 \(nk\) dp 状态 \(f[i][k]\) 表示以 \(i\) 为第 \(k\) 段的最后一个元素时所能获得的最大代价.转移的时候枚举上一段的最后一个元素 \(j\)更新状态即可 ...

  4. 1 Easy Read/Write Splitting with PHP’s MySQLnd

    以下均是使用翻译软件翻译的! Note: This is part one in our Extending MySQL with PHP's MySQLnd Series, read part 2 ...

  5. Codeforces Round #307 (Div. 2) D 矩阵快速幂+快速幂

    D. GukiZ and Binary Operations time limit per test 1 second memory limit per test 256 megabytes inpu ...

  6. Sql Server 2008 R2 数据库脚本导出方法

    经常忘记怎么搞,截几张图记录一下. 1 选中要导出的数据库,右键—>任务—>生成脚本 2 3 4 查看保存的脚本

  7. 线程池 ------ linux C实现

    大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的.在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由 ...

  8. WPF:为什么使用ContentPresenter.ContentSource而不是Content属性?

    因为ContentPresenter.ContentSource比Content属性加一个TemplateBinding看起来更方便?不仅仅是这些,实际上如果用ContentSource的话,Cont ...

  9. [实战篇入门]02-POI简单创建Excel

    周日的小讲堂要讲到这里,趁中午时间写点东西,记录昨天晚上完成的东西,在这里只是简单的介绍如何创建对于样式问题,我不过多的说,因为之后的教程会使用模版方式搞定! 在学习这段代码的时候,希望各位访问Apa ...

  10. [LeetCode] 4. Median of Two Sorted Arrays ☆☆☆☆☆

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...