hdu 4671 Partition(DP,整数划分,5级)

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧 Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。 阅读详情

Partition

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 114    Accepted Submission(s): 46


Problem Description
How many ways can the numbers 1 to 15 be added together to make 15? The technical term for what you are asking is the "number of partition" which is often called P(n). A partition of n is a collection of positive integers (not necessarily distinct) whose sum equals n.

Now, I will give you a number n, and please tell me P(n) mod 1000000007.
 


 

Input
The first line contains a number T(1 ≤ T ≤ 100), which is the number of the case number. The next T lines, each line contains a number n(1 ≤ n ≤ 10 5) you need to consider.

 


 

Output
For each n, output P(n) in a single line.
 


 

Sample Input
  
4 5 11 15 19
 


 

Sample Output
  
7 56 176 490
 


 

Source
 


 

Recommend
zhuyuanchen520

 

根本就不会嘛公式谁会推啊,写个DP超,果断搜公式爆搜,终于找到了维基百科的公式了,结果题解给的就是这个网站。哎!这就一公式。

http://en.wikipedia.org/wiki/Partition_(number_theory)

 

 

#include<iostream>
#include<cstring>
#include<cstdio>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define clr(f,z) memset(f,z,sizeof(f))
#define LL __int64
using namespace std;
const int mm=1e5+9;
const LL mod=1000000007;
LL dp[mm],f[mm];
void getdata()
{ int zt=1000;
  FOR(i,-1000,1000)f[i+zt]=i*(3*i-1)/2;
  dp[0]=1;
  FOR(i,1,mm-1)
  {
    dp[i]=0;
    FOR(j,1,i)
    {
      if(f[j+zt]<=i)
      {
        if(j&1)
        {
          dp[i]+=dp[i-f[j+zt]];
        }
        else dp[i]-=dp[i-f[j+zt]];
      }
      else break;
      dp[i]=(dp[i]%mod+mod)%mod;
      if(f[zt-j]<=i)
      {
        if(j&1)
        {
          dp[i]+=dp[i-f[zt-j]];
        }
        else dp[i]-=dp[i-f[zt-j]];
      }
      else break;
    }
    dp[i]=(dp[i]%mod+mod)%mod;
  }
}
int main()
{
   int cas;
   getdata();int n;
   while(~scanf("%d",&cas))
   {
     while(cas--)
     {
       scanf("%d",&n);
       printf("%I64d\n",dp[n]);
     }
   }
    return 0;
}


背包版本

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<iostream>

using namespace std;

int a[100001];
int main()
{
    //freopen("data.txt","w",stdout);
    int lim = 10000;
    a[0] = 1;
    for(int i=1;i<=lim;i++)
    for(int j=0;j+i<=lim;j++){
        a[i+j] = (a[i+j] + a[j]);
        if (a[i+j] >= 1000000007)
           a[i+j] -= 1000000007;
    }
    int T,n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        printf("%d\n",a[n]);
    }
    return 0;
}


递归版本

#include<iostream>
#include<cstring>
#include<cstdio>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define clr(f,z) memset(f,z,sizeof(f))
#define LL __int64
using namespace std;
const int mm=1e5+9;
const LL mod=1000000007;
const int cd=1000;
LL dp[mm][cd];
LL Part(LL n,LL m)
{
    if ((n < 1)||(m < 1))
        return 0;
    if ((n == 1)||(m == 1))
        return 1;
    if(m<1000&&dp[n][m]!=-1)return dp[n][m];
    LL ret=0;
    if (n < m)
        {ret=Part(n, n);
         ret%=mod;
         if(m<1000)dp[n][m]=ret;
         return ret;
        }
    if (n == m)
        {ret=Part(n, m-1) + 1;
         ret%=mod;
         if(m<1000)dp[n][m]=ret;
         return ret;
        }
        ret=Part(n, m-1) + Part(n-m, m);
        ret%=mod;
        if(m<1000)dp[n][m]=ret;
    return ret;
}

int main()
{
  int cas,n;
  clr(dp,-1);
  while(~scanf("%d",&cas))
  {
    while(cas--)
    { //scanf("%d",&n);
      FOR(i,1,50)
      { n=i;
        printf("%d %I64d\n",i,Part(n,n));
      }
    }
  }
  return 0;
}


 

整数划分,求每个划分。

void print_partition(int n)
{
  int i = 1;
  int m = 1;
  int h = 1;
  int t, r;
  int a[n + 1];
 
  for (; i < n + 1; ++i) a[i] = 1;
  a[1] = n;
  printf("%d \n", a[1]);
 
  while (a[1] != 1)
  {
    if (a[h] == 2)
    {
      a[h--]--;
      m++;
    }
    else
    {
      r = --a[h];
      t = m - h + 1;
 
      while (t >= r)
      {
        a[++h] = r;
        t -= r;
      }
      if (t == 0) m = h;
      else m = h + 1;
      if (t >= 2) a[++h] = t;
    }
    for (i = 1; i < m + 1; i++)
      printf("%d ", a[i]);
    printf("\n");
  }
}


 

 

真格量化——GFTD策略 #!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import numpy as np import math #开始时间,用于初始化一些参数 def OnStart(context) : print "I\'m starting..." #设置全局变量 g.signalcount = 0 g.signal_list = [] g.buysignal = 0 . 阅读详情

相关推荐

Shopee App加密算法逆向实战:从libshpssdk.so到x-sap-ri的生成机制

本文详细解析了Shopee App核心加密参数x-sap-ri的生成机制。通过逆向分析libshpssdk.so动态库,揭示了其采用9套算法动态切换的复杂签名逻辑,并分享了从抓包定位、Frida动态调试到Unidbg模拟执行的全过程实战经验,为移动应用安全研究提供了完整的技术路径。

weixin_29323551的博客 1328

2013 多校第五场 hdu 4651 Partition

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4671 题目大意:将一个数n进行拆分成几个数相加,问有多少种方案? 思路: 参见五边形定理。。 http://en.wikipedia.org/wiki/Partition_(number_theory) n 的上限是10^5,普通二维的公式时间空间都不行。。后来问了一下,原来做出来的都是直接上

沉溺的专栏 1519

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 393

String Partition(字符串,dp)

思路:典型dp,第一部分的for双重循环语句把一个大数字拆分成小数字的所有形式,第二部分就是比较了,从0开始遍历,dp[i] 是指第i项以及前面的项中最大的和。 数组a[i][j]用于表示以i为首以j为尾的值 这里状态转移方程在逐步将i的元素进行求和,dp[j]用于表示前j项最大值,a[j+1][i]就是表示后面整体的值 这里j相当于一个分割点,将一段数字分成两半 我们先假设没有关键点1,,看看关...

WAWA战士的博客 425

电流镜结构实战:从零理解MOS管偏置电路设计(附吴金课程补充)

本文深入解析电流镜结构在MOS管偏置电路设计中的关键作用,从基本原理到实战应用全面覆盖。通过分析偏置电路的核心原理、破解设计难题的实用技巧,以及进阶优化策略,帮助工程师掌握这一模拟电路设计的核心技术。特别适合需要理解电流镜结构和基准电路设计的读者参考学习。

ujm5678901的博客 256

手把手教你用Cesium和RayMarching实现逼真体积云(附完整Shader代码)

本文详细介绍了如何利用Cesium和RayMarching技术实现逼真的体积云效果,包括环境准备、核心逻辑、云层建模和光照增强等关键步骤,并提供了完整的Shader代码。通过噪声函数选型、动态风场模拟和多重散射近似等技术,开发者可以在数字地球可视化项目中创建沉浸式天气效果,显著提升场景的真实感。

weixin_29230649的博客 415

整数划分问题算法分析与实现(递归)

把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。 把一个正整数n写成为 n=m1+m2+…+mi。其中,mi为正整数,并且1≤mi≤n;{m1,m2,…,mi}为n的一个划分。 如{m1,m2,…,mi}果中的最大值不超过m,即max(m1,m2,…,mi)≤m,则称它属于n的一个m划分。

修炼中的kongkong 976

多层环境室内定位系统综述总结

本文是一篇发表于2025年《IEEE Access》期刊的综述论文,由埃及开罗美国大学与卡塔尔卡内基梅隆大学团队合作完成,聚焦多层环境室内定位系统的核心挑战、技术方案及未来方向,填补了该领域缺乏全面综述的空白。

程序员石磊 444

hdu 4602 Partition (概率方法)

Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2472    Accepted Submission(s): 978 Problem Description Define f(n) as th

Coding A World 1386

微博scheme

微博scheme

qq_42278595的博客 319

【Android性能优化】Android App 冻结与内存压缩:CachedAppOptimizer 源码级解析

本文基于 AOSP Android 16 源码,以 `CachedAppOptimizer` 为核心,深度解析 Android 对"后台缓存应用"的两大治理手段——**进程冻结(Freezer)**与**内存压缩(Compaction)**。文中完整还原冻结的 debounce 去抖动机制、`mEarliestFreezableTime` 的最早可冻结时刻算法、粘性冻结(Sticky Freeze)的语义,以及解冻时必须"先解 binder 再解进程"的顺序奥义。

weixin_44081096的博客 175

K. Medians and Partition(dp)

题目链接:http://codeforces.com/gym/101911/problem/K 题目大意:一群数,求最多可以分成多少段,才能使得每个段的中位数都大于M 思路:(出于骏神的超强思路,弱鸡根本想不出)dp[i]表示1-i最多可以分多少个段,使得每个段的中位数都大于M。 怎么转移??对于dp【i】我们可以计算一个j到i能否分解出j到i这个子区间。 判断条件就是(sum[i]-su...

qq_41645482的博客 333

科研绘图系列:R语言绘制世界地图数据分布(world map)

科研绘图系列:R语言绘制世界地图数据分布(world map)

专注生信领域 527

HDU 4671 Partition(定理题)

题目链接 这题,明显考察搜索能力。。。在中文版的维基百科中找到了公式。 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <algorithm> 5 using namespace std; 6 #define MOD 1000...

weixin_30533797的博客 75

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

String Partition - UVa 11258 dp

Problem F - String Partition John was absurdly busy for preparing a programming contest recently. He wanted to create a ridiculously easy problem for the contest. His problem was not only easy, b

提比的强行AC 556

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU 4602 Partition (整数拆分&找规律&快速幂取模)

Partition http://acm.hdu.edu.cn/showproblem.php?pid=4602 Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Problem Description Define f(

AC,∑ndless 1304

hdu 1028整数划分

1、母函数 杭州电子科技大学课件 算法就是简单的模拟, (1+x+x^2+x^3+...)(1+x^2…+x^4+x^6+...)(1+x^3…+x^6+x^9+)...(...) =[1*(1+x^2…+x^4+x^6+...)+x*(1+x^2…+x^4+x^6+...)+x^2*(1+x^2…+x^4+x^6+...]*(1+x^3…+x^6+x^9+)...(...) #in

pmt123456的博客 687

hdu 5646 Partition数学+构造

点击打开链接 //把n拆分成不同k个数之和 使得k个数乘积最大 //因为C=A+B  A+2AB  //推出k个数为连续的 或者为连续两段中间差2,构造这k个数即可  #include #include #include #include #include using namespace std; typedef long long ll; const ll mod=1e9+

Masamiiiiii 728

hdu 4651 Partition(公式)

题目链接:hdu 4651 Partition解题思路本质上其实是一个完全背包,但是物品有1e5,所以复杂度太大。有一个五边形数的公式可以优化。代码#include <cstdio> #include <cstring> #include <algorithm>/* * 五边形数:f(n) = sum( (-1)^(k+1) [ P(n-k(3k-1)/2) + P(n-k(3k+1)/2)]

不慌不忙、不急不躁 807

HDU 4062 Partition

Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1049 Accepted Submission(s): 427 Problem Description Define f(n) as the numb

公众号:ByteCode 1744

最简单的整数划分问题 HDU 1028

Ignatius and the Princess IIITime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24456    Accepted Submission(s): 16986Problem Description"Well, it ...

wwxy1995的博客 460

HDU-4651-Partition

ACM模版整数拆分题目链接HDU 4651 Partition题解将n拆分成多个正整数之和,问有多少种拆法? 如5 = 1+1+1+1+1 = 1+1+1+2 = 1+1+3 = 1+4 = 5 = 1+2+2 = 2+3.共7种 公式: f[n]=∑(-1)^(k-1)(f[n-k(3*k-1)/2]+f[n-k*(3*k+1)/2]) 其中n-k*(3*k-1)/2>=0,n-k

逐梦者 553

HDU 4602 Partition (计数方法+组合知识)*

Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3582    Accepted Submission(s): 1402   Problem Description Define f(n) as the numb...

满月照亮的路 248

Happy Matt Friends

Happy Matt Friends Time Limit: 6000/6000 MS (Java/Others)Memory Limit: 510000/510000 K (Java/Others)Total Submission(s): 0Accepted Submission(s): 0 Problem Description Matt has N ...

weixin_30856965的博客 175

HDU1028整数划分

  题目描述 整数划分是一个经典的问题。请写一个程序,完成以下要求。     输入 每组输入是两个整数n和k。(1 &lt;= n &lt;= 50, 1 &lt;= k &lt;= n) 输出 对于输入的 n,k; 第一行: 将n划分成若干正整数之和的划分数。 第二行: 将n划分成k个正整数之和的划分数。 第三行: 将n划分成最大数不超过k的划分数。 第四行: 将n划分成...

weirdo_coder的博客 382

HDU 4651 2013多校联合第5场 Partition 数论

Partition Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 422    Accepted Submission(s): 242 Problem Description How many ways can

clasky的专栏 1151

hdu(4602) Partition

用到了二分幂算法和公式; 罗列一到五可得到规律;              1        2       3        4            5 1           1 2            2       1 3           3        2       1 4           12      5       2        1 5      

飞雪---晨 693
上一篇: hdu 4396 More lumber is required(最短路,SPFA,4级)
下一篇: hdu 4650 Minimum Average Weight Path(最短路,5级)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值