lightoj 1145 - Dice (I) 前缀和优化DP
来源:互联网 发布:如何编写安卓软件 编辑:程序博客网 时间:2024/05/19 15:39
给定一个骰子,骰子有k个面,然后有n个,问n个骰子正面朝上的数字和为s的有多少种方案。
很容易想到一个n*s*k的DP,但是很容易爆炸。
首先n*s是肯定不能少的,那么k这一重循环可以省么,是可以的。
其实对于一个和s来言,就是加上i-1的s-1到s-k..那么我们可以用前缀和来优化掉。就是连续k个和加起来,每次往后一次在加一个减一个...挺好想到的
#include<bits/stdc++.h>using namespace std;#define ll long long#define mod 100000007#define inf 0x3f3f3f3fll dp[2][16000];int main(){ int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { int n,k,s; scanf("%d %d %d",&n,&k,&s); memset(dp,0,sizeof(dp)); int x=1; dp[0][0]=1; for(int i=1;i<=n;i++) { ll sum=0; for(int j=0;j<=s;j++) { dp[x][j]=sum; if(j<k) sum=(sum+dp[x^1][j])%mod; else sum=((sum+dp[x^1][j]-dp[x^1][j-k])%mod+2*mod)%mod; } x=x^1; } printf("Case %d: %lld\n",cas,dp[x^1][s]); } return 0;}
0 0
- lightoj 1145 - Dice (I) 前缀和优化DP
- LightOJ 1193 Dice (II)(前缀和优化dp)
- lightoj 1193 - Dice (II) 前缀和优化DP
- lightoj 1145 Dice (I) (DP)
- LightOJ 1145 Dice (I) dp
- [dp+树状数组优化] LightOJ 1145 - Dice (I)
- Dice (I) lightOJ 1145
- 1145 - Dice (I) Lightoj
- lightoj 1145 - Dice (I)
- LightOJ 1064 Throwing Dice (DP)
- 【LightOJ 1064 】Throwing Dice + dp
- light oj 1145 - Dice (I) DP计数
- Light OJ 1145 Dice (I) (DP)
- lightoj - 1064 - Throwing Dice - dp / 概率dp
- LightOJ 1064 Throwing Dice 概率DP
- LightOJ - 1248 Dice (III) 期望 + dp
- lightOJ 1248 - Dice (III) 概率DP
- LightOJ 1064 - Throwing Dice (dp)
- bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)
- UVAlive3523 Knights of the Round Table(bcc)
- 隐式启动Activity
- UVAlive11324 The Largest Clique(scc+dp)
- IllegalStateException: Can not perform this action after onSaveInstanceState
- lightoj 1145 - Dice (I) 前缀和优化DP
- UVAlive4287 Proving Equivalences(scc)
- UVAlive3211 Now or later(2-SAT)
- UVAlive3713 Astronauts(2-SAT)
- bzoj2208 [Jsoi2010]连通数(scc+bitset)
- bzoj1823 [JSOI2010]满汉全席(2-SAT)
- 如何获取IMEI号和MEID号
- 1022D进制的A+B
- uoj#67. 新年的毒瘤(割顶)