hdu 1723 Distribute Message

来源:互联网 发布:人工智能龙头股票 编辑:程序博客网 时间:2024/06/04 19:06

1.题目

http://acm.hdu.edu.cn/showproblem.php?pid=1723

2.分析

类似于阶梯问题,只不过此处,当处理i的时候,决策前i-1个,即为min(M,i)

3.复杂度

时间复杂度O(N^2);空间复杂度O(N);

4.涉及内容

动态规划

5.感想

本道题让我想起了对于求单调递增子序列(LIS)中的O(NLogN)的优化思路:在积累的索引递增数组B[N]中不断查找第一个大于等于d[i]的位置即可。具体请看参考文献1.

6.代码

#include <iostream>using namespace std;long f[31];#define min(a,b) (a>b?b:a)int main(){//freopen("in.txt","r",stdin);int M,N;while(cin>>N>>M,!(N==0&&M==0)){memset(f,0,sizeof(f));f[0]=0;f[1]=1;for(int i=2;i<=N;++i){for(int k=1;k<=min(M,i);++k)f[i]+=f[i-k];}cout<<f[N]<<endl;}return 0;}

7.参考文献

1.http://www.felix021.com/blog/read.php?1587 (单调最长递增子序列LIS的O(NLogN)算法分析)
原创粉丝点击