hdu 5230 整数划分 dp
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5230
题意:给定n,c,l,r。求有多少种方法从1~n-1选取任意k数每个数的权重为其下标,使得这些数字之和加上c之后在l,r范围内。
题解:第一反应是计数01包,但是范围给定的n太大,TLE。。。 然后仔细想想,不就是求l~r范围内不重复的整数划分数嘛。
dp[i][j]表示j这个数字,当前的拆分拥有i个拆分数时的方案数。
先考虑允许重复数字 : dp[i][j] = dp[i][j - i] + dp[i - 1][j - 1];
考虑分成两类,
1、dp[i][j - i]:这种拆分方案(拥有i个数字的拆分方案),如果没有1,就比如7 = 3 + 4这样,然后每个数字都加上一,
就变成了9 = 5 + 4。所以dp[2][9]可以由dp[2][7]转化过来。当然7 = 1 + 6也是合法解。
2、dp[i - 1][j - 1]:这种拆分方案有1,比如4 = 3 + 1,那么我可以截去那个1,变成3 = 3,然后加上最后那个1,就变成了
4 = 3 + 1,所以dp[2][4]可以由dp[1][3]转化过来。
这里提供了一种思维--对数字的组合分类以及每个数都+1的状态转移。这里对是否有1存在做了一个分类。仿照这个思想我们去定义新的dp[i][j].
dp[i][j]表示j这个数字,当前的拆分拥有i个不重复拆分数时的方案数。
按照上述的思维:
(a) 当不存在1的时候,dp[i][j]可以由dp[i][j-i]转移而来;
(b) 当存在1的时候,由于dp的定义只存在一个1。那么我们把这个1单独拎出来,然后对剩下的i-1分成j-i组 dp[i][j]=dp[i-1][j-i];
综合上述的两种情况:dp[i][j] = dp[i][j - i] + dp[i - 1][j - i];
当这里,这道题目还是没法ac。。。因为如果我们用普通的方法去求解这个dp,内存吃不住的,用滚动数组优化一下。
(真心不容易,,,还有一些细节要处理)
ac_code:
#include <cstdio>
#include <iostream>
#include <cstring>
#define mt(a) memset(a,0,sizeof(a))
using namespace std;
typedef long long ll;
int dp[][];
const int mod=;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,c,l,r;
scanf("%d %d %d %d",&n,&c,&l,&r);
mt(dp);
if(c>r)
{
cout<<<<endl;
continue;
}
dp[][]=;
int L=l-c;
int R=r-c;
int ans= (L==);// 对0的情况做一个特判断
L=max(,L);
//R=max(n-1,R);
int now=;
for(int i=;i*(i+)/ <= max(R,n-);i++)// 个数 由于是从1开始枚举 那么枚举i个数字的和最小为 i*(i+1)/2 还有就是能取的上限也要注意
{
for(int j=i*(i+)/;j<=R;j++) // 分数 同上,从最小的开始,优化
{
dp[now][j]=(dp[now][j-i]+dp[!now][j-i])%mod; // 滚动数组
if(j>=L && j<=R)
{
ans+=dp[now][j];
ans%=mod;
}
}
memset(dp[!now],,sizeof(dp[!now]));
now=!now;
}
printf("%d\n",ans);
}
return ;
}
hdu 5230 整数划分 dp的更多相关文章
- 【NOI2019模拟2019.6.27】B (生成函数+整数划分dp|多项式exp)
Description: \(1<=n,k<=1e5,mod~1e9+7\) 题解: 考虑最经典的排列dp,每次插入第\(i\)大的数,那么可以增加的逆序对个数是\(0-i-1\). 不难 ...
- 51nod 1201 整数划分 dp
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 收藏 关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2 ...
- bzoj 3612 [Heoi2014]平衡——整数划分(dp)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 因为力矩的缘故,变成了整数划分. 学习到了整数划分.就是那个图一样的套路.https: ...
- hdu 1028 & hdu 1398 —— 整数划分(生成函数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028 整数划分,每个数可以用无限次: 所以构造 f(x) = (1+x+x2+x3+...)(1+x2+x ...
- bzoj 3612: [Heoi2014]平衡【整数划分dp】
其实就是-n~n中求选k个不同的数,和为0的方案数 学到了新姿势叫整数划分,具体实现是dp 详见:https://blog.csdn.net/Vmurder/article/details/42551 ...
- 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...
- 大概是:整数划分||DP||母函数||递推
整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...
- HDU acm1028 整数划分 递归问题(递推)
我们用递归+记忆化的方法来解决普通整数划分问题:定义 f(n,m)为将整数n划分为一系列整数之和,其中加数 最大不超过m. 得到下面的递推关系式: 当n==1 || m==1 只有一种划分,即 1 或 ...
- zzulioj--1719--小胖的疑惑(整数划分+dp打表)
1719: 小胖的疑惑 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 108 Solved: 51 SubmitStatusWeb Board De ...
随机推荐
- 感知机模型到DNN模型
参考资料 感知机模型:https://www.cnblogs.com/pinard/p/6042320.html DNN:https://www.cnblogs.com/pinard/p/641866 ...
- Redis 命令使用
Redis 中所有 key-value 都储存在 Redis-Object 中,Redis-Object 主要信息有: 数据类型(type) string (字符串) hash (Hash表) lis ...
- Flutter移动电商实战 --(53)购物车_商品列表UI框架布局
cart_page.dart 清空原来写的持久化的代码; 添加对应的引用,stless生成一个静态的类.建议始终静态的类,防止重复渲染 纠正个错误,上图的CartPage单词拼错了,这里改过来防止后面 ...
- Flutter移动电商实战 --(43)详细页_补充首页跳转到详细页
首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.router.navigateTo(co ...
- VUE el-input正则验证
①只能输入大于0的整数 check(value) { let reg = /^[-]\d*$/; var _this = this; if (value) { if (new RegExp(reg). ...
- nineoldandroids开源库
Android3.0 推出AnimationAPI ,使用起来比较方便,但是不能再3.0以下版本中使用.nineoldandroids开源库可以在任意版本上使用,官网地址:http://nineold ...
- 17flutter中的路由/命名路由/命名路由传值/无状态组件传值/有状态组件传值。
main.dart import 'package:flutter/material.dart'; import 'package:flutter_demo/pages/Search.dart'; i ...
- 采购信息记录批导BAPI
转自:https://www.cnblogs.com/freeandeasy/p/11810272.html作者的话: 可以批导创建及修改信息记录的主数据.而且可以对条件中的时间段及其数量等级中的 ...
- 【设计】PC Web端框架组件
https://uedart.com/demo/templatesWebKit/index.html#g=1&p=%E4%BD%9C%E5%93%81%E9%A6%96%E9%A1%B5 移动 ...
- Win10使用Tex Live和VS Code和Latex Workshop插件编写Latex文档(未完成版本)
首先取Tex Live官网下载安装包:https://www.tug.org/texlive/acquire-netinstall.html 我下载的是 http://mirror.ctan.org/ ...