0
已解决
问题描述
有N颗弹珠要分给K个人,给定N、K,求有多少种分配方案。
输入描述
一行,两个整数,为N、K
输出描述
一个整数,表示分配的方案数。
输入样例
7 3
输出样例
36
数据范围
1<=K<=8
K<=N<=30
完颜傲伦在2018-05-06 15:24:52追加了内容
怎么错了??
#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
void doit(int x,int step)
{
if(step==k)
{
ans++;
return;
}
for(int i=0;i<=x;i++)
doit(x-i,step+1);
return;
}
int main()
{
cin>>n>>k;
doit(n-1,1);
cout<<ans;
return 0;
}
跪求大佬帮助
完颜傲伦在2018-07-26 12:30:41追加了内容
对于给定的nxn方格中,每个方格放入一个不重复数,放置好nxn个数后,请输出最大主对角线方格数之和(即方格左上角到右下角方格数之和)。
输入描述 Input Description
输出为两行;
第一行输入n(不超过100),它表示nxn个方格。
第二行输入nxn个不重复的数,它表示放入nxn个方格中的数。
输出描述 Output Description
输出为一行,输出方格主对角线最大数之和。
样例输入 Sample Input
2
1 2 3 4
样例输出 Sample Output
7
#include<bits/stdc++.h>
#include<stdlib.h>
#include<string>
#include<cctype>
#include<cmath>
#include<stack>
using namespace std;
int a[100001];
int main()
{
int n,i,j,ans=0,t=0;
cin>>n;
n=int(pow(n,2));
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<sqrt(n);i++)
ans+=a[i];
cout<<ans;
return 0;
}
0
1
0
0
void doit(int x,int step)
{
if(step==k)
{
ans++;
return;
}
for(int i=0;i<=x;i++)doit(x-i,step+1);
return;
}
0