【codevs1039】01年noip TG--数的划分满分dp+愚蠢深搜+pas的奇怪做法
将整数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的奇怪做法相关推荐
- 洛谷 - P1025 数的划分(计数dp)
题目链接:点击查看 题目大意:将整数 n 分成 k 份有多少种分法 题目分析:设 dp[ i ][ j ] 为将整数 i 分成 j 份的方案数,拆分整数可以等价为放小球,相当于将 n 个小球放进 k ...
- 方格取数(多线程dp,深搜)
https://www.luogu.org/problem/P1004 题目描述 设有N×N的方格图(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某 ...
- 2001年 数的划分
数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). 例如:n=7,k=3,下面三种划分方案被认为是相同的. 1 1 5 1 5 1 5 1 1 问有多少种不 ...
- ALGO-22 数的划分(DFS,经典剪枝)
ALGO-22 数的划分 时间限制: 1 Sec 内存限制: 128 MB 题目描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同 ...
- 【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, ...
- 算法训练 数的划分 动态规划
算法训练 数的划分 时间限制:1.0s 内存限制:256.0MB 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. ...
- 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的
上海新高考3+3模式,与从前相比新增了一个等级考的概念.那么很多考生不知道上海高考等级考分数怎么划分等级的,下面一起带大家来看看. 关于等级考 改革之后的上海高考,统一考试的科目为: 大三门:语文.数 ...
- [01背包] 背包问题求具体方案(01背包+求方案数+思维)
文章目录 0. 前言 1. 01背包+求方案数+思维 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包+求方案数+思维 12. 背包问题求具体方案 求方案数也是背包问题.dp 的 ...
- [01背包] 数字组合(01背包+求方案数)
文章目录 0. 前言 1. 01背包求方案数 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包求方案数 278. 数字组合 将 M 看作背包容量,每个数看成一个物品,Ai 看成是 ...
最新文章
- 用实例揭示notify()和notifyAll()的本质区别
- how to come in an investnent bank team
- 快排、寻找第k小数和前k小数
- boost::sort模块实现支持不同分布的随机数生成器的测试程序
- Linux文件夹含义
- SAP Spartacus如何使用自定义的Cart Service
- 你知道哪些开源基金会?
- chmod、chown函数的使用
- 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算
- 燃气管理 php,智能燃气管理信息系统设计
- 服务器系统盘单独硬盘,我的服务器今天加了个硬盘,可以实现双系统吗?
- 二十年前的电脑配置单,大家见过吗?
- 常用类 (三) ----- BigDecimal和BigInteger大数类
- python histogram函数_python (ploit2)(histogram)
- 厉害了,苹果爸爸承认让旧 iPhone 变慢!
- BMI160低功耗学习
- html调色板快捷键,12款web前端最佳调色板工具
- 网管实战(4):网关地址与子网掩码
- Unity 优化Unity切换后台的问题
- Python采集股票数据信息
热门文章
- ZooKeeper的安装和API
- 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
- nparray和tensor的相互转化
- R语言学习笔记(九)聚类分析
- Mac上Java开发环境配置
- 1_初识less引用变量作用域变量差值
- jQuery的实现,去掉传入html代码两端的空格:
- java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
- 无序数组求第k大的数 python_【python刷题】寻找数组中第K大/小的数
- oracle as sydba,Oracle数据库之SQL*Plus工具使用 sqlplus / as sysdba登录