UVA 10943 How do you add?

uva 10943How do you add?(简单组合) Problem A: How do you add? Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ry 阅读详情

Problem A: How do you add?

Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a snowboarding accident. They're now trying to spend some time figuring out some good problems, and Ryan will eat Larry if he cannot answer, so his fate is up to you! 

It's a very simple problem - given a number N, how many ways can K numbers less than N add up to N

For example, for N = 20 and K = 2, there are 21 ways: 
0+20 
1+19 
2+18 
3+17 
4+16 
5+15 
... 
18+2 
19+1 
20+0 


Input

Each line will contain a pair of numbers N and KN and K will both be an integer from 1 to 100, inclusive. The input will terminate on 2 0's.

Output

Since Larry is only interested in the last few digits of the answer, for each pair of numbers N and K, print a single number mod 1,000,000 on a single line. 

Sample Input

20 2
20 2
0 0

Sample Output

21
21


这题主要是找规律,因为需要找一个递推公式,可以看到下面的

n k 1 2 3 4 5 …… 100

1    1 2 3 4 5…… 100

2    1 3 6 10 15……

3    1 4 10 20 35 ……

4    1 5 15 35 70 ……

分析后就可发现有 a[i][j]=a[i-1][j]+a[i][j-1],事先要对数组进行预处理,就是a[0][i](0<=i<=99)=i,a[i][0](0<=i<=99)=1,这是我们可以知道的,也是递推的前提条件,然后再对结果进行取模就好了

#include<iostream>
# define mod 1000000
using namespace std;
int main()
{
	int n,k,i,j,a[100][100];
	for(i=0;i<100;i++)
	{
		a[i][0]=1;
		a[0][i]=i+1;
	}
	for(i=1;i<100;i++)
	for(j=1;j<100;j++)
	a[i][j]=(a[i][j-1]+a[i-1][j])%mod;
	while(cin>>n>>k,n&&k)
	{
		cout<<a[n-1][k-1]<<endl;
	}
	
	return 0;
} 










UVA 10943How do you add? Larry is very bad at mathhe usually uses a calculator, which workedwell throughout college. Unforunately, he is now struck in a desertedisland with his good buddy Ryan after a snowboarding accident 阅读详情

相关推荐

C - How do you add

Larry is very bad at mathhe usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a snowboarding accide...

qq_42865713的博客 339

uva 10943 - How do you add?(dp)

题目连接:uva 10943 - How do you add? 题目大意:给出n和k,用k个数组成加法算式,使得最后的和为n,求有多少种组合方式。 解题思路:一开始不知道0也算,即比如说 1  100, 可以使0 + 0 + 1,所以说答案是100。num[i][j] = ∑ num[k][j - 1](0 ≤ k ≤ i)。 #include #includ

不慌不忙、不急不躁 1542

How do you add?

How do you add? Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a

沧6月的专栏 610

UVA10943 How do you add【递推打表】

Larry is very bad at mathhe usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a snowboarding accident.     They’re now trying to spend

海岛Blog 384

UVa 10943 - How do you add?

Description Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a sn...

weixin_30851867的博客 160

uva 10943 How do you add? (DP)

Problem E : How do you add? From:UVA, 10943 Problem A: How do you add? Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now s

不戚的专栏 690

UVA10943How do you add?

题目链接:http://vjudge.net/contest/view.action?cid=46225#problem/C

追梦赤子心 989

uva10943 How do you add?

题意:把K个不超过N的非负整数加起来,使得它们的和为N,有多少种方法 思路:令dp[i][j]为和为i用了j个数的方案数,那么转移就是dp[i][j]=dp[i-1][j]+dp[i][j-1] #include using namespace std; int dp[101][101]; const int mod = 1e6; int main() { for (int

围巾的ACM博客 781

UVA 10943 - How do you add? 递推

把K个不超过N的非负整数加起来,使得他们的和为N,有多少种方法?比如N=5,K=2,有6种方法。即0+5,1+4,2+3,3+2,4+1,5+0. 输入N和K,求方法总数除以10^6的余数

细语呢喃 1495

uva 10943 - How do you add?

找规律。 #include #include #include #include #include #include #include using namespace std; long long nk[110][110]; int main() { int n,k; for(int i = 1; i <= 100; i++) nk[1][i] = i;

u010652938的专栏 586

UVA10943 - How do you add?(DP)

UVA10943 - How do you add?(DP) 题目链接 题目大意:给你N和K,要求找出这样的K个数(小于等于N),和等于N,问有多少种结果模上1e6。 解题思路:dp。 代码: #include #include const int maxn = 105; const int MOD = 1e6; typedef long long ll; ll

579

UVA 10943 - How do you add?

Problem A: How do you add? Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ry

炒饭君的博客 1785

How do you add?UVA 10943

这题正解其实是用隔板法,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³)。

TryMyEdge 465

uva10943 How do you add?(DP)

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=11&page=show_problem&problem=1884 #include <iostream> #include <cstring> #...

akk99296的博客 131
上一篇: UVA 11889 Benefit
下一篇: 在CSDN中如何从个人主页进入专栏
colorfulshark
博客等级 码龄15年 631粉丝 459原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值