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的更多相关文章

随机推荐

  1. docker-管理数据

    管理Docker中的数据 默认情况下,在容器内创建的所有文件都存储在可写容器层中.这意味着: 当该容器不再运行时,数据不会持久存在,如果另一个进程需要,则可能很难从容器中获取数据. 容器的可写层紧密耦 ...

  2. K8s生产架构

    部分图片显示问题,特附上有道云笔记中的链接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4 ...

  3. 28.python操作excel表格(xlrd/xlwt)

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

  4. ArcEngine 数据编辑(IWorkspaceFactory)

    数据编辑做过很多次,没怎么出现问题,今天出现了问题,浪费了大半天,记录一下. 问题:修改Featrue的属性,修改后停止编辑,但是没有提示是否保存修改 原因:在编辑数据的时候没有加StartEditO ...

  5. ASP.Net MVC 引用动态 js 脚本

    希望可以动态生成 js  发送给客户端使用. layout页引用: <script type="text/javascript" src="@Url.Action( ...

  6. java 大数的学习

    import java.math.*; import java.util.*; public class study { public static void main(String[] args) ...

  7. Activiti接受任务(receiveTask)

    Activiti接受任务(receiveTask) 作者:Jesai 前言: Activiti接受任务(receiveTask)其实和Activiti的手动任务是差不多的,不过手动任务是直接通过,而A ...

  8. V模型

    V模型是Kevin Forsberg & Harold Mooz在1978年提出的,V模型强调测试在系统工程各个阶段中的作用,并将系统分解和系统集成的过程通过测试彼此关联.V模型从整体上看起来 ...

  9. [洛谷P4097] [HEOI2013] Segment

    Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 2.给定一个数 \(k\) ,询问与直线 \(x = k\ ...

  10. Python-直接存储类实例作为序列的元素

    如果我们需要存储的数据有很多属性,并且存储的数量很多,可选择定义一个类来表示数据类型,而类的实体作为单个的成员进行存储,这样做的好处是可以只存储一个容器,而不需要每次都存储大量的数据,并且可以限制对数 ...