博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4602 - Partition
阅读量:5278 次
发布时间:2019-06-14

本文共 1406 字,大约阅读时间需要 4 分钟。

原题见:

 

题目要求:按题意找出对应数字出现的次数。

  4=1+1+1+1

  4=1+1+2
  4=1+2+1
  4=2+1+1
  4=1+3
  4=2+2
  4=3+1
  4=4               例如此例:1出现的次数为12。

 

 

代码如下:

1 #include 
2 3 typedef long long ll; 4 ll mod=1e9+7; 5 //#include
6 ll qpow(ll n,ll m) 7 { 8 ll ans = 1; 9 while(m>0)10 {11 if(m&1) ans = ans * n % mod;12 n = n * n % mod;13 m = m >> 1; 14 }15 return ans;16 } 17 /*ll fun(ll n,ll k)18 {19 if(n==k) return 1;20 else if(n==k+1) return 2;21 else if(n-2 == k) return 5;22 //else if(n-3 == k)return 12;23 else return 2*fun(n-1,k)+qpow(2,n-3); 24 }*/25 int main()26 {27 int t;28 ll ans,n,k;29 scanf("%d",&t);30 while(t--)31 {32 scanf("%lld%lld",&n,&k);33 if(k>n) { 34 printf("0\n"); 35 continue; 36 } 37 else 38 { 39 //printf("%lld\n",fun(n,k)); 40 ans=2*qpow(2,n-k-1)%mod+(n-k-1)*qpow(2,n-k-2)%mod;41 printf("%lld\n",ans%mod);42 } 43 }44 45 46 return 0;47 }

找规律即可,例如将5的实例也写出后数数=,=会发现

n=%d 1     2    3    4    5

k=1    1     2    5   12  28

k=2    0     1    2    5   12

k=3    0     0    1    2    5

k=4    0     0    0    1    2

k=5    0     0    0    0    1

 

找到规律吧少年~~~~f(n)=2*f(n-1)+pow(2,n-3)或者ans=2*pow(2,n-k-1)%mod+(n-k-1)*pow(2,n-k-2)%mod

也就是说注释的部分也是对的,那为什么会变成注释呢?  =。=因为递归层数太多,导致本宝的程序MLT……!!空间超限。。。生平第一次啊。。。。然后就沦为注释。。。

嗯,就这样吧!

转载于:https://www.cnblogs.com/ivangin/p/5201655.html

你可能感兴趣的文章
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
centos下同时启动多个tomcat
查看>>
Leetcode Balanced Binary Tree
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
0320-学习进度条
查看>>
MetaWeblog API Test
查看>>