2015多校第6场 HDU 5355 Cake 贪心,暴力DFS
题目链接: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的更多相关文章
- 2015多校第6场 HDU 5360 Hiking 贪心,优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...
- 2015多校第6场 HDU 5353 Average 贪心,细节处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353 题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块.现在有三种操作:第i个人给 ...
- 多校第六场 1003 hdu 5355 Cake(贪心)
题目链接:(数据加强后wa了) hdu 5355 题目大意: 给出一个蛋糕.切成1~n大小的n块.问是否能在不继续分割的情况下拼凑出m等份. 题目分析: 首先我们是可以知道每份蛋糕的尺寸的,利用n*( ...
- 2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354 题意:求删去每个点后图是否存在奇环(n,m<=1e5) 解法:很经典的套路,和这题一样:h ...
- 2015多校第6场 HDU 5361 并查集,最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...
- 2015多校第6场 HDU 5358 First One 枚举,双指针
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358 题意:如题. 解法:观察式子发现,由于log函数的存在,使得这个函数的值域<=34,然后我 ...
- 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5405 题意: 给你一棵n个节点的树,有点权. 要求支持两种操作: 操作1:更改某个节点的 ...
- 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的最 ...
- 2015多校第7场 HDU 5378 Leader in Tree Land 概率DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:一棵n个节点的树.对其节点进行标号(1~n).求恰好存在k个节点的标号是其节点所在子树的最 ...
随机推荐
- 转:learning to rank学习
learning to rank学习 转: http://blog.csdn.net/xuqianghit/article/details/8947819 1. 什么是learning to rank ...
- [洛谷P4735]最大异或和
题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$, ...
- [Leetcode] longest valid parentheses 最长的有效括号
Given a string containing just the characters'('and')', find the length of the longest valid (well-f ...
- React获取组件实例
1. 直接new Component() 组件本身也是class,可以new,这样的组件实例意义不大 componentInstance = new Component(); 2. ReactDOM. ...
- [LOJ 6000]搭配飞行员
link 其实就是一道二分图匹配板子,我们建立$S$,$T$为源点与汇点,然后分别将$S$连向所有正驾驶员,边权为$1$,然后将副驾驶员与$T$相连,边权为$1$,将数据中给出的$(a,b)$,将$a ...
- Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition)A 水 B 二分 C并查集
A. Petr and a calendar time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Uva-oj Product 大数乘法
Product Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Des ...
- Leetcode 200. 岛屿的个数(扩展)
1.题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...
- MongoDB入门(4)- MongoDB日常操作
MongoDB客户端 MongoDB有很多客户端 MongoVue Robomongo MongoDB命令行 启动mongo shell 在windows下,双击mongo.exe可以启动mongo ...
- MongoDB入门(2)- MongoDB安装
windows安装 下载文件,解压缩即可.下载地址 每次运行mongod --dbpath D:/MongoDB/data 命令行来启动MongoDB实在是不方便,把它作为Windows服务,这样就方 ...