问题标题: 酷町堂1416

0
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
已采纳
徐熙晨
徐熙晨
新手光能
新手光能

@完颜傲伦 这道题的数据很大,要用long long

徐熙晨在2018-07-26 17:27:07追加了内容

我之前就是这么错的

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
栾峻岩
栾峻岩
初级天翼
初级天翼
doit(n-1,1); 
错了,应是:
doit(n,1);

 

我要回答