How do you add?(UVA 10943)
2016-07-18 23:27
387 查看
题目链接
这题正解其实是用隔板法,ans(n,k)=C(n+k-1,k-1),因为这题n比较小,所以可以直接用C(n,m)=C(n-1,m-1)+C(n-1,M)打出杨辉三角,时空复杂度都是O(n²)。
然后我用的方法是DP,ans(n,k)=∑(i:0->n)ans(i,k-1), 时间复杂度O(n³)。
附上AC代码:
Memory: 0 KB Time: 0 MS
Language: C++ 4.8.2 Result: Accepted
这题正解其实是用隔板法,ans(n,k)=C(n+k-1,k-1),因为这题n比较小,所以可以直接用C(n,m)=C(n-1,m-1)+C(n-1,M)打出杨辉三角,时空复杂度都是O(n²)。
然后我用的方法是DP,ans(n,k)=∑(i:0->n)ans(i,k-1), 时间复杂度O(n³)。
附上AC代码:
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<cstdio> #include<queue> #include<set> #include<vector> #include<map> #include<string> #include<cmath> #define pq priority_queue #define Pi acos(-1.0) #define MAXX 1000000007 using namespace std; int gcd(int a,int b) { if(a%b) return gcd(b,a%b); else return b; } int dp[105][105]; int main() { int n,k; for(int i=0;i<=100;i++) dp[i][1]=1; for(int j=2;j<=100;j++) for(int i=0;i<=100;i++) { for(int m=0;m<=i;m++) dp[i][j]+=dp[i-m][j-1]; dp[i][j]%=1000000; } while(scanf("%d%d",&n,&k),n+k!=0) { printf("%d\n",dp [k]); } return 0; }
Memory: 0 KB Time: 0 MS
Language: C++ 4.8.2 Result: Accepted
相关文章推荐
- 详解Android应用中屏幕尺寸的获取及dp和px值的转换
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android dpi,dip,dp的概念以及屏幕适配
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata
- B.489 - Hangman Judge
- C.445 - Marvelous Mazes