Food combination ZJU2861 组合数学
来源:互联网 发布:知乎 男生喝醉酒找你 编辑:程序博客网 时间:2024/06/07 03:25
转化为模型即为求最多含有L个1的N位二进制数中的第M大的数
#include<stdio.h>
#include<iostream>
#include<memory.h>
using namespace std;
#define MAXN 63
long long a[MAXN];
long long b[MAXN];
long long c[MAXN][MAXN];
long long gcd(long long x,long long y)
{
if (y==0) return x;
else return gcd(y,x%y);
}
long long C(long long k,long long n)
{
long long i,j;
if (c[k][n]!=0) return c[k][n];
long long temp,ans;
for(i=n-k+1;i<=n;i++) a[i]=i;
for(i=1;i<=k;i++) b[i]=i;
for(i=1;i<=k;i++)
for(j=n-k+1;j<=n;j++)
{
temp=gcd(b[i],a[j]);
b[i]/=temp;
a[j]/=temp;
}
ans=1;
for(i=n-k+1;i<=n;i++)
ans=ans*a[i];
c[k][n]=ans;
return ans;
}
long long Calc(long long k,long long n)
{
long long ans;
long long i,j;
ans=0;
for(i=1;i<=k;i++)
ans+=C(i,n);
return ans;
}
long long ans;
void dfs(long long dep,long long k,long long rem)
{
if (dep==0) return ;
long long temp=Calc(k,dep-1);
if (temp>=rem) {dfs(dep-1,k,rem);return ;}
ans=ans|(1<<(dep-1));
dfs(dep-1,k-1,rem-temp-1);
}
int main()
{
long long n,l,m,i,j;
memset(c,0,sizeof(c));
while(cin>>n>>l>>m)
{
ans=0;
dfs(n,l,m-1);
cout<<ans<<endl;
}
}
- Food combination ZJU2861 组合数学
- UVALive 6844 Combination(组合数学)
- [BZOJ2982]combination(组合数学lucas定理)
- 组合数学lucas定理 BZOJ2982 combination
- [bzoj2982]combination(组合数学lucas定理)
- 组合(Combination)
- 组合算法 combination 源代码
- JAVA组合函数Combination
- 组合生成 Combination Sum
- [leetcode]Combination组合
- 关于组合-combination sum
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- 组合数学
- sql server中日期时间格式转换
- PCF8563 不工作问题,晶振停止IIC访问不了
- JDBC连接sqlserver2008
- 股票行情接收头文件(转)
- 中国神仙一览
- Food combination ZJU2861 组合数学
- 锐捷职业认证
- 推荐10个Android开源项目-转载 自己备用
- Sql Server命名规范
- 七大IT业界顶尖认证证书
- 用Process Monitor观察进程对文件的操作(创建和重命名)
- IT创业失败案例解析 - 第一篇
- 在日期字段上执行查询的不同效率
- 思科认证的好处