题目大意:给定一个正整数 N,求至少从 [1,N] 中选出多少个数能够表示出 [1,N] 中的所有整数,每个数只能被选 1 次,并求出对于最优解有多少种不同的选择方案。

题解:好题。

仅考虑用最少的不同数字组合出 [1,N] 中所有的数,答案应该是 N 的二进制分解后的总位数,即:选出用 2 的幂次的数去组合是最好的方式。

若从 dp 的角度进行考虑,可以发现,对于从 [1,N] 中的数对答案来说都有选或不选两种情况,因此可以看成是背包问题的变种。

设 \(dp[i][j]\) 表示前 i 个数字中选出若干数,能够组合出 [1,j] 中所有数字的选出数字的最小个数。转移时的决策有两种,即:选 i 与不选 i,状态转移方程为

\[dp[i][j]=min\{dp[i-1][j],dp[i-1][k]+1,k=max(i-1,j-i)\}
\]

注意,这里对于 k 的取值不能仅仅是 j-i,若 \(j-i<i-1\),则添加 \(i\) 后能够组合出的区间为 \([0,j-i]+[i,j]\),发现中间部分断开了,不符合状态的要求,因此 \(j-i\) 取值的最小值是 \(i-1\),即:\([0,i-1]+[i,j]\)。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=1010; int n,f[maxn][maxn],g[maxn][maxn]; void solve(){
memset(f,0x3f,sizeof(f));
g[0][0]=1,f[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=0;j<=n;j++){
int k=max(i-1,j-i);
f[i][j]=min(f[i-1][j],f[i-1][k]+1);
if(f[i][j]==f[i-1][j])g[i][j]+=g[i-1][j];
if(f[i][j]==f[i-1][k]+1)g[i][j]+=g[i-1][k];
}
}
printf("%d %d\n",f[n][n],g[n][n]);
} int main(){
scanf("%d",&n);
solve();
return 0;
}

【洛谷P1490】买蛋糕的更多相关文章

  1. 洛谷 P1490 买蛋糕 解题报告

    P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...

  2. 洛谷 P1490 买蛋糕

    P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...

  3. 洛谷P1940买蛋糕

    题目传送门 题意:给定你一个数n,要求用最小个数的整数组成小于等于n的所有整数,并求出方案数. 很明显,擅长二进制的大犇们肯定一眼就看得出方案数是log2(n)+1,然而我并不擅长,但是推了一小会儿也 ...

  4. 洛谷 P1490 解题报告

    P1490 买蛋糕 题目描述 野猫过生日,大家当然会送礼物了(咳咳,没送礼物的同志注意了哈!!),由于不知道送什么好,又考虑到实用性等其他问题,大家决定合伙给野猫买一个生日蛋糕.大家不知道最后要买的蛋 ...

  5. 洛谷 P1194 买礼物

    洛谷 P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第II样东西,再买第J样,那么 ...

  6. [洛谷P1528] 切蛋糕

    洛谷题目链接:切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把 ...

  7. 洛谷P1528 切蛋糕 [搜索,二分答案]

    题目传送门 切蛋糕 题目描述 Facer今天买了n块蛋糕,不料被信息组中球球等好吃懒做的家伙发现了,没办法,只好浪费一点来填他们的嘴巴.他答应给每个人留一口,然后量了量每个人口的大小.Facer有把刀 ...

  8. 洛谷——P1194 买礼物

    P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...

  9. 洛谷—— P1714 切蛋糕

    https://www.luogu.org/problem/show?pid=1714 题目描述 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每 ...

随机推荐

  1. JavaEE-实验二 Java集合框架实验

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  2. Linux常用命令touch/grep/mkdir/rm/cat/find/cp/mv/tar/gzip等

    Unix-->Linux(Ubuntu,Redhat,suse,fedora) 1. cd - :回到上次执行的那个目录(相当于“回看”的功能) 2. touch :创建一个文件,可以是任意后缀 ...

  3. k8s中使用harbor

    参考地址:https://www.cnblogs.com/wayneiscoming/p/7716238.html .在harbor的ui界面上注册一个账号 姓名:zihao 全名:zhuzihao ...

  4. 关于JS的prototype详解

    JavaScript面向对象 构造函数和原型链 首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类.我们所常见的类包括 ...

  5. JMeter接口测试印象篇(win10)

    参考博文1:https://www.cnblogs.com/suim1218/p/9257369.html 参考博文2:https://blog.csdn.net/u011541946/article ...

  6. 【Qt开发】QT中用函数把float转化成QString

    QT中用函数把float转化成QString 最普通的用法,例如:     float f;     QString str = QString("float is %1").ar ...

  7. shiro登陆认证

    1.LoginController @RequestMapping(method = RequestMethod.POST) public String login(User user, HttpSe ...

  8. 第七周&实验报告五

    实验四 类的继承 •实验目的 •理解抽象类与接口的使用: •了解包的作用,掌握包的设计方法. •实验要求 •掌握使用抽象类的方法. •掌握使用系统接口的技术和创建自定义接口的方法. •了解 Java ...

  9. 手写数字识别 卷积神经网络 Pytorch框架实现

    MNIST 手写数字识别 卷积神经网络 Pytorch框架 谨此纪念刚入门的我在卷积神经网络上面的摸爬滚打 说明 下面代码是使用pytorch来实现的LeNet,可以正常运行测试,自己添加了一些注释, ...

  10. adb 设置安卓连接wifi

    一. 修改wpa_supplicant.conf文件 1.1. 获得root权限 adb root 1.2. 将wpa_supplicant.conf拷贝到你的电脑 adb pull /data/mi ...