LOJ P10018 数的划分 题解
2024-10-19 22:42:20
每日一题 day52 打卡
Analysis
这道题直接搜索会TLE到**,但我们发现有很多没有用的状态可以删去,比如 1,1,5; 1,5,1; 5,1,1;
所以很容易想到一个优化:按不下降的顺序枚举划分出来的每个数。
然而还是会TLE...
再来想一个事情:n=7,k=4 已经枚举了 1,2,3 三个数,这是如果再枚举 2~7 的数就就显得非常蠢
所以你枚举的数 x 应该小于等于 n-sum(a[i])/(k-step+1),
综上,对于每个枚举的数 x ∈ {x∈N*| a[step-1]<=x<=n-sum(a[i])/(k-step+1) }
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define maxn 200+10
#define rep(i,s,e) for(register int i=s;i<=e;++i)
#define dwn(i,s,e) for(register int i=s;i>=e;--i)
using namespace std;
inline int read()
{
int x=,f=;
char c=getchar();
while(c<''||c>'') {if(c=='-') f=-; c=getchar();}
while(c>=''&&c<='') {x=x*+c-''; c=getchar();}
return f*x;
}
inline void write(int x)
{
if(x<) {putchar('-'); x=-x;}
if(x>) write(x/);
putchar(x%+'');
}
int n,k,ans;
int a[maxn];
void dfs(int step)
{
if(n==) return;
if(k==step)
{
if(n<a[step-]) return;
ans++;
return;
}
rep(i,a[step-],n/(k-step+))
{
a[step]=i;
n-=i;
dfs(step+);
n+=i;
}
}
signed main()
{
n=read();k=read();
a[]=;
dfs();
write(ans);
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
最新文章
- 修改git的远程仓库命令
- html快速入门(基础教程+资源推荐)
- 学习jQuery之旅
- Python 迭代dict 效率
- php部分--例子:租房子(复选框的全选、数组拼接成字符串、设置复选框的name值、)
- JavaScript高级程序设计之基本包装类型
- 广州Uber优步司机奖励政策(2月1日~2月7日)
- AutoPy首页、文档和下载 - 跨平台的Python GUI工具包 - 开源中国社区
- 文件同步服务器,iis 集群 ,代码同步(一)
- 0x02 译文:Windows桌面应用Win32第一个程序
- centos7下安装docker(23.docker-swarm之如何访问service)
- poj 1611 The Suspects(并查集输出集合个数)
- struts2框架之拦截器(参考第二天学习笔记)
- POJ1469 COURSES 二分图匹配 匈牙利算法
- unity(2017.3) C# 常用API
- 应用程序添加角标和tabBar添加角标,以及后台运行时显示
- Hadoop HBase概念学习系列之HFile(二十)
- MySQL高级第五章——主从复制
- SQL命令行操作
- 转载——为Xamarin更好的开发而改写的库