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的更多相关文章
随机推荐
- 7个效果震憾的HTML5应用组件
在HTML5的世界里,任何文本.图像都可以变得令人难以想象,很多HTML5应用也都已经随着浏览器的升级而变得运行飞速,而且兼容性也越来越好.下面为大家介绍7款效果震憾的HTML5应用组件,HTML5是 ...
- java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
上几次博客,我们把volatile基本都说完了,剩下的还有我们的synchronized,还有我们的AQS,这次博客我来说一下synchronized的使用和原理. synchronized是jvm内 ...
- 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇
大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了. 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4 ...
- Milking Cows 挤牛奶 USACO 排序 模拟
1005: 1.2.1 Milking Cows 挤牛奶 时间限制: 1 Sec 内存限制: 128 MB提交: 15 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1 ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第五节:数据流处理的那些事儿
为什么说到数据流了呢,因为上一节中介绍了一下异步发送请求.同样,在数据流的处理上,C#也为我们提供几个有用的异步处理方法.而且,爬虫这生物,处理数据流是基础本能,比较重要.本着这个原则,就聊一聊吧. ...
- 新上手jupyterlab安装及问题解决
最近jupyter notebook又出了一个新玩法:jupyterlab但是很多小伙伴和我一样,在安装的时候出现了很多问题,于是乎我总结了一下,希望给大家带来帮助 首先,最好保持你的浏览器是最新的版 ...
- python self用法
在定义类的过程中,无论是显式的创建类的构造方法,还是向类中添加实例方法,都要将self参数作为方法的第一个参数. class Person: def __init__(self): print(&qu ...
- Python学习,第五课 - 列表、字典、元组操作
本篇主要详细讲解Python中常用的列表.字典.元组相关的操作 一.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 通过下标获取元素 #先定义一个列表 le ...
- Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)
最近由于冠状病毒疫情的原因,只能够和小朋友家里蹲.这几天把尘封已久的那个树莓派拿出来继续捣鼓.希望能够做一个异构的分布式系统框架,于是想把Docker也安装到树莓派上,以便后期做进一步的开发和实验. ...
- 从txt文本内读取数据(逐行读取),执行循环
如下图,名称为1.txt的文本文件内有链接若干条,预期是循环读取txt文本内链接,而后访问该链接 脚本如下: for line in open('C:\\Users\\Beckham\\Desktop ...