博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】Gym - 100507G - The Debut Album
阅读量:7049 次
发布时间:2019-06-28

本文共 809 字,大约阅读时间需要 2 分钟。

一般思路的dp是用f(i,j,0)表示前i位最后有j个1的方案数,用f(i,j,1)表示前j位最后有j个2的方案数,j都是大于等于1的,然后比较容易转移。

但这题卡内存,就只能用f(i,j)表示前i位最后有j个1的方案数,这里j大于等于0。

然后转移就略麻烦,自己看代码领会一下吧。

也可以看成是滚动数组优化。

#include
using namespace std;#define MOD 1000000007int n,lim[2];int f[50010][310],g[50010];int main(){ //freopen("g.in","r",stdin); scanf("%d%d%d",&n,&lim[0],&lim[1]); f[1][0]=f[1][1]=1; g[1]=1; for(int i=2;i<=n;++i) { for(int k=1;k<=lim[0] && k<=i;++k) { f[i][k]=(f[i][k]+f[i-1][k-1])%MOD; g[i]=(g[i]+f[i][k])%MOD; } for(int k=1;k<=lim[1] && k<=i-1;++k) f[i][0]=(f[i][0]+g[i-k])%MOD; if(i<=lim[1]) f[i][0]=(f[i][0]+1)%MOD; } int ans=0; for(int k=0;k<=lim[0] && k<=n;++k) ans=(ans+f[n][k])%MOD; printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6359092.html

你可能感兴趣的文章
为什么写科技博客是情侣如此重要?
查看>>
ORACLE触发特定的解释
查看>>
UVA - 11388 GCD LCM
查看>>
操作系统的文件系统思考
查看>>
【LeetCode】211. Add and Search Word - Data structure design
查看>>
Light OJ Dynamic Programming
查看>>
android开发隐藏了actionbar仍然短暂闪现的解决方法
查看>>
返回顶部的功能 div固定在页面位置不变
查看>>
printf在终端输出时改变颜色
查看>>
在Flex4中嵌入字体
查看>>
图像处理之小波变换
查看>>
基于Zlib算法的流压缩、字符串压缩源码
查看>>
问题-[DelphiXE2]提示第三控件不存在
查看>>
三层架构(一个)——什么是三层架构?
查看>>
Xamarin.Android开发实践(十二)
查看>>
ORA-12571: TNS:packet writer failure
查看>>
Android:WebView(慕课网)
查看>>
JS中的数学计算<之简单实例讲解>
查看>>
Android开发之ExpandableListView扩展(BaseExpandableListAdapter的使用)(完整版)
查看>>
深入理解JS的delete
查看>>