将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种划分方案被认为是相同的。
1 1 5

1 5 1

5 1 1
问有多少种不同的分法。

输入:n,k (6<n<=200,2<=k<=6)

输出:一个整数,即不同的分法。

样例in:7 3

样例out:4

先说一下比较蠢(wo de)的做法,直接回溯,由于不知道怎么加优化然后就只得了80,最后一个数据取了极限值,1s内过不了╮(╯▽╰)╭

这段代码是通过前数比后数大来避免重复,但由于时间复杂度为指数级,所以会导致超时

#include<cstdio>
using namespace std;
void f(int,int);
int n,ans,k,a[1001]={1};
bool flag[1001]={true};
main()
{
scanf("%d%d",&n,&k);
 
f(n,1);
printf("%d",ans);
}
void f(int x,int y)
{
if (x==0&&y==k+1) {ans++;return;}
for (int i=a[y-1];i<=x;i++)
{
if (i<n)
{
x-=i;
a[y]=i;
f(x,y+1);
x+=i;

}
}

蒟蒻po主什么都不会,推导dp方程最后和标解一比发现错了(a[i][j]=a[i-1][j-1]+a[i-1][j]与a[i][j]=a[i-1][j-1]+a[i-j][j]),看来不细心认真,想敷衍了事是做不好什么东西的╮(╯▽╰)╭

#include<cstdio>
#include<iostream>
int a[2001][2001]={0};
using namespace std;
main()
{
int n,k;
//scanf("%ld%ld",&n,&k);
cin>>n>>k;
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
{
if (i==j) a[i][j]=1;
else if (j==1) a[i][j]=1;
else if (j>i) a[i][j]=0;//以上为几种特殊情况,其实有两条不加也并不影响什么
else a[i][j]=a[i-1][j-1]+a[i-j][j];//对于i,如果有1,我们要将它分成j份,那么我们可以取出一个1(有且仅有一个1作为单独的一份,然后i-1分成j-1份,即f1(i,j)=f(i-1,j-1);

//如果没有1,那么我们相当于把i-j分成j份,然后再给这j份分别加一个1,即f2(i,j)=f(i-j,j);

//最终得出f(i,j)=f1(i,j)+f2(i,j)=f(i-1,j-1)+f(i-j,j);

}
printf("%d",a[n][k]);
}

还有一种很奇怪的用字符串的做法(pascal代码),好久以前写的不知道怎么的就过了,想了一下并总结也是类似于搜索的方法。

在经过”codevs=聪的女生“的输入法预言帝之后,聪哥和信息组大家庭在一起吃饭的时间越来越少,这不奇怪,但奇怪的是聪哥每次都和两个女生坐在一起,甚至这两个女生跑到男生宿舍门口指名道姓找聪哥,这也让大家产生了怀疑——聪哥怎么这么招这两个女生找他?codevs背后究竟隐藏着什么?~~这一切的一切究竟是节操的沦丧还是人性的扭曲~~不过我们还是相信聪哥说的话的:“是朋友,仅是朋友!”

var s:string; ans:longint; pan:boolean;
procedure f(a:string);
var i,t,e:longint; b:string;
beginval(a,t,e);t:=t div 2;inc(ans);if t<>0 thenbeginfor i:=1 to t dobeginstr(i,b);insert(b,a,1);f(b);end;endelse exit;
end;
beginread(s);ans:=0;pan:=true;f(s);write(ans);
end.

【codevs1039】01年noip TG--数的划分满分dp+愚蠢深搜+pas的奇怪做法相关推荐

  1. 洛谷 - P1025 数的划分(计数dp)

    题目链接:点击查看 题目大意:将整数 n 分成 k 份有多少种分法 题目分析:设 dp[ i ][ j ] 为将整数 i 分成 j 份的方案数,拆分整数可以等价为放小球,相当于将 n 个小球放进 k ...

  2. 方格取数(多线程dp,深搜)

    https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...

  3. 2001年 数的划分

    数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). 例如:n=7,k=3,下面三种划分方案被认为是相同的. 1 1 5 1 5 1 5 1 1 问有多少种不 ...

  4. ALGO-22 数的划分(DFS,经典剪枝)

    ALGO-22 数的划分 时间限制: 1 Sec 内存限制: 128 MB 题目描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同 ...

  5. 【DP】数的划分(ybtoj DP-1-3)

    数的划分 ybtoj DP-1-1 题目大意 给你一个n,让你分成k份,问有多少种分法(1,2和2,1为同一种) 输入样例 7 3 输出样例 4 样例解释 四种分法为:1,1,5;1,2,4;1,3, ...

  6. 算法训练 数的划分 动态规划

    算法训练 数的划分 时间限制:1.0s   内存限制:256.0MB 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. ...

  7. 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的

    上海新高考3+3模式,与从前相比新增了一个等级考的概念.那么很多考生不知道上海高考等级考分数怎么划分等级的,下面一起带大家来看看. 关于等级考 改革之后的上海高考,统一考试的科目为: 大三门:语文.数 ...

  8. [01背包] 背包问题求具体方案(01背包+求方案数+思维)

    文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...

  9. [01背包] 数字组合(01背包+求方案数)

    文章目录 0. 前言 1. 01背包求方案数 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包求方案数 278. 数字组合 将 M 看作背包容量,每个数看成一个物品,Ai 看成是 ...

最新文章

  1. 用实例揭示notify()和notifyAll()的本质区别
  2. how to come in an investnent bank team
  3. 快排、寻找第k小数和前k小数
  4. boost::sort模块实现支持不同分布的随机数生成器的测试程序
  5. Linux文件夹含义
  6. SAP Spartacus如何使用自定义的Cart Service
  7. 你知道哪些开源基金会?
  8. chmod、chown函数的使用
  9. 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
  10. 燃气管理 php,智能燃气管理信息系统设计
  11. 服务器系统盘单独硬盘,我的服务器今天加了个硬盘,可以实现双系统吗?
  12. 二十年前的电脑配置单,大家见过吗?
  13. 常用类 (三) ----- BigDecimal和BigInteger大数类
  14. python histogram函数_python (ploit2)(histogram)
  15. 厉害了,苹果爸爸承认让旧 iPhone 变慢!
  16. BMI160低功耗学习
  17. html调色板快捷键,12款web前端最佳调色板工具
  18. 网管实战(4):网关地址与子网掩码
  19. Unity 优化Unity切换后台的问题
  20. Python采集股票数据信息

热门文章

  1. ZooKeeper的安装和API
  2. 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
  3. nparray和tensor的相互转化
  4. R语言学习笔记(九)聚类分析
  5. Mac上Java开发环境配置
  6. 1_初识less引用变量作用域变量差值
  7. jQuery的实现,去掉传入html代码两端的空格:
  8. java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
  9. 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
  10. oracle as sydba,Oracle数据库之SQL*Plus工具使用 sqlplus / as sysdba登录