HDU_5230_DP
http://acm.hdu.edu.cn/showproblem.php?pid=5230
有初始值c,给你1~n的数,输入c+一些数,使得结果在l~r的范围内,输出方案数,注意每种方案中每个数只能使用一次。
可以直接令l和r减去c,便成了分解l~r内的数,求分解方案。
dp[i][j]表示i个数组成j的方案数,根据j最大值推出i最大值,有状态方程dp[i][j] = dp[i][j-i]+dp[i-1][j-i]推出每一个值,最后求出答案即可。
dp[i][j-i]表示相同数量,但每个数都减去一的方案,另外考虑到该方案可以含有1,也就是dp[i-1][j-i]。
另外注意每次要mod一下,于是有了以下代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
#define MOD 998244353
using namespace std; LL n,c,l,r,dp[][]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
LL ans;
memset(dp,,sizeof(dp));
scanf("%d%d%d%d",&n,&c,&l,&r);
l -= c;
r -= c;
if(l) ans = ;
else ans = ;
dp[][] = ;
for(int i = ;i*(i+)/ <= r;i++)
{
for(int j = i*(i+)/;j <= r;j++)
{
dp[i][j] = (dp[i][j-i]+dp[i-][j-i])%MOD;
if(j >= l)
{
ans = (ans+dp[i][j])%MOD;
}
}
}
printf("%lld\n",ans);
}
return ;
}
然而内存竟然超了,于是改进,使用2个数组轮流交替,得出最终答案。
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
#define MOD 998244353
using namespace std; LL n,c,l,r,dp[][]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
LL ans;
memset(dp,,sizeof(dp));
scanf("%d%d%d%d",&n,&c,&l,&r);
l -= c;
r -= c;
if(l) ans = ;
else ans = ;
dp[][] = ;
for(int i = ;i*(i+)/ <= r;i++)
{
for(int j = i*(i+)/;j <= r;j++)
{
dp[i%][j] = (dp[i%][j-i]+dp[(i+)%][j-i])%MOD;
if(j >= l)
{
ans = (ans+dp[i%][j])%MOD;
}
}
memset(dp[(i+)%],,sizeof(dp[(i+)%]));
}
printf("%lld\n",ans);
}
return ;
}
HDU_5230_DP的更多相关文章
随机推荐
- Jmeter基础学习-下载及安装
1. Jmeter下载路径:http://jmeter.apache.org/download_jmeter.cgi 进入Jmeter下载界面后英语不好+技术不灵的同学会蒙圈,下载那个呢? *Bina ...
- Java程序员必备基础:内部类解析
前言 整理了一下内部类的相关知识,算是比较全,比较基础的,希望大家一起学习进步. 一.什么是内部类? 在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类.内部类本身就是类的一个属性 ...
- vue状态管理vuex从浅入深详细讲解
1.vuex简介以及创建一个简单的仓库 vuex是专门为vue框架而设计出的一个公共数据管理框架,任何组件都可以通过状态管理仓库数据沟通,也可以统一从仓库获取数据,在比较大型的应用中,数据交互庞大的情 ...
- python如何计算程序(代码块)的运行时间?
1.引入time模块 2.调用time模块的time()函数 :用来获取当前的时间,返回的单位是秒 # 引入一个time模块, * 表示time模块的所有功能, # 作用: 可以统计程序运行的时间 f ...
- Spring Boot2 系列教程 (十三) | 整合 MyBatis (XML 版)
前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,之前介绍过了 SpringBoot 整合MyBatis 注解版的使用,上一篇介绍过 MyBatis ...
- bzoj_1036 树链剖分套线段树
bzoj_1036 ★★★★ 输入文件:bzoj_1036.in 输出文件:bzoj_1036.out 简单对比时间限制:1 s 内存限制:162 MB [题目描述] 一棵树上有n个节 ...
- vue基础中的注意事项,以及一些学习心得
vue中你不知道的东西.以及注意事项 v-html 使用 v-html的时候该指令中的值会覆盖绑定标签中原有的值,且使用v-html的时候不要将他设置为给用户提供内容的地方,因为v-html很容易被X ...
- dp - 递推
C. Multiplicity time limit per test 3 seconds memory limit per test 256 megabytes input standard inp ...
- Java对接微信公众号模板消息推送
内容有点多,请耐心! 最近公司的有这个业务需求,又很凑巧让我来完成: 首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offi ...
- 安装mysql遇到的问题
想在自己的PC上安装mysql服务器,首先在官网下载mysql的安装文件. MySQL安装文件分两种 .msi和.zip ,.msi需要安装,.zip文件需要配置环境变量. 我首先下载的是不需要安装的 ...