HihoCoder1651 : 小球染色([Offer收割]编程练习赛38)(DP的优化)
描述
小Ho面前有N个小球排成了一排。每个小球可以被染成M种颜色之一。
为了增强视觉效果,小Ho希望不存在连续K个或者K个以上的小球颜色一样。
你能帮小Ho计算出一共有多少种不同的染色方法么?
例如N=4, M=2, K=3,则有10种染色方法:
0010 0011 0100 0101 0110 1001 1010 1011 1100 1101
输入
三个整数:N, M和K。
对于30%的数据, 1 ≤ N, M, K ≤ 100
对于60%的数据,1 ≤ N, M, K ≤ 300
对于100%的数据,1 ≤ N, M, K ≤ 1000
输出
一个整数表示答案。注意方法数可能非常大,你只需要输出模1000000007的结果。
样例输入
4 2 3
样例输出
10
我猜大部分人是用O(n^2)的DP做的,我是O(n)嘻嘻,大数据轻轻松松。。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int max(int a,int b) {if(a>b) return a;return b;}
const int Mod=;
long long dp[],sum[];
int main()
{
int n,m,k,i,j;
scanf("%d%d%d",&n,&m,&k);k--;
for(i=;i<=n;i++){
int tmp=max(,i-k);
if(i->=tmp) dp[i]=((sum[i-]-sum[tmp-])%Mod+Mod)%Mod*(m-);
if(i-k<=) dp[i]+=m;
sum[i]=(sum[i-]+dp[i])%Mod;
}
printf("%lld\n",dp[n]%Mod);
return ;
}
HihoCoder1651 : 小球染色([Offer收割]编程练习赛38)(DP的优化)的更多相关文章
- [Offer收割]编程练习赛38
漏写的数字 #pragma comment(linker, "/STACK:102400000,102400000") #include<stdio.h> #inclu ...
- HihoCoder1652 : 三角形面积和2([Offer收割]编程练习赛38)(几何)(不会几何,占位)
描述 如下图所示,在X轴上方一共有N个三角形.这些三角形的底边与X轴重合,底边上两个顶点的坐标分别是(Li, 0)和(Ri, 0),底边的对顶点坐标是(Xi, Yi).其中Li ≤ Xi ≤ Ri 且 ...
- HihoCoder1650 : 扁平化管理([Offer收割]编程练习赛38)(二分)
描述 小Hi的公司包括CEO在内一共有N名员工.这N名员工的上下级关系形成树形结构,CEO处于树根,普通员工处于叶子节点. 现在公司希望管理扁平化,要求树形结构中的层级不超过L层.此外,假设A是B的直 ...
- HihoCoder1649 : 漏写的数字([Offer收割]编程练习赛38)(模拟题)
描述 小A今年刚上幼儿园,正在学习写100以内的数字.幼儿园的老师留了一项作业,要求小A从某个100以内的数X开始一直写到另一个100以内的数Y(Y - X > 1). 不过粗心的小A在作业中漏 ...
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- [Offer收割]编程练习赛97
链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256 ...
- hihoCoder[Offer收割]编程练习赛1题目解析
题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反 ...
随机推荐
- lambda表达式转换sql
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...
- [转]如何用C++实现一个LRU Cache
[转自http://hawstein.com/posts/lru-cache-impl.html] LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法 ...
- 【阿里云】Windows2008 FTP配置指南
云服务器默认使用Windws 2008 IIS 中自带的FTP服务器. 1.添加FTP帐号 A. 选择[服务管理器]--[配置]--[本地用户和组]--[用户]:在空白处右键选择[新用户] ...
- CISCO Configuration Examples and TechNotes
from: http://www.cisco.com/c/en/us/tech/ip/ip-routing/tech-configuration-examples-list.html Border ...
- js 第二篇 (DOM 操作)
DOM 节点含有:元素节点,属性节点,文本节点. document.getElementById("id") //通过页面元素ID 值 捕获元素对象,得到的值为一个object 1 ...
- 史上最浅显易懂的Git教程2 github
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的, ...
- java 白皮书的关键术语
[0]README 0.1) 本文转自 core java volume 1,仅供了解,所谓爱屋及乌嘛: 0.2) java的设计者编写了颇有影响力的白皮书,用来解释设计的初衷以及完成的情况,并发布了 ...
- FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程(转)
很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序也能继续运行.这是因为对MCU烧写固件 的实质就是将程序固件写入到M ...
- CentOS6.5安装MySQL5.6 过程记录
刚开始,还不太懂,直接上了MySQL5.7版本的二进制安装,结果遇到了各种问题,从5.6到5.7还是做了很大改变的,比如mysql_install_db的文件位置变更到了/bin文件下等等,觉得现在用 ...
- 关于gcc
1 the architecture of gcc 2 自己编译gcc时的 --build --host --target选项的含义和用法 <1> --build 执行本次的gcc编译的主 ...