gpt4 book ai didi

c++ - (c++) 如何有效地制作升序(dyn.solution)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:16:36 27 4
gpt4 key购买 nike

我目前正在尝试制作一个涉及升序的程序。 N为序列的大小,K为最大数,例如

输入:2,3

输出:6 (1,1 - 1,2 - 1,3 - 2,2 - 2,3 - 3,3)

我当前的代码输出了正确的答案,但是要花太多时间才能得到正确的答案。什么是最快的解决方案,我该如何做动态解决方案?这是解决方案较慢的代码:

#include<iostream>
using namespace std;
int n,k,cnt=0,mod=1000000007;
int seq(int n, int k, int first, int depth){
if(depth > n){
cnt = cnt + 1;
return cnt;
}
else {
for(int i=first;i<=k;i++){
seq(n,k,i,depth+1);
}
}
return cnt;
}
int main()
{
cin>>n>>k;
cout<<seq(n,k,1,1)%mod<<"\n";
return 0;
}

最佳答案

我已经使用动态规划解决了这个问题。

    #include<bits/stdc++.h>
#define up(j,k,i) for(i=j;i<k;i++)
#define down(j,k,i) for(i=j;i>k;i--)
#define pp(n) printf("%lld\n",n)
#define is(n) scanf("%lld",&n)
#define ips(n) scanf("%lld",n)
#define ss(s) scanf("%s",s)
#define cool 0
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define f(i) cout<<i<<endl;
#define pll pair<lld,lld>
#define pi acos(-1)
#define ds(n,m) scanf("%lld %lld",&n,&m)
#define ts(n,m,k) scanf("%lld %lld %lld",&n,&m,&k)
typedef long double ld;
typedef long long int lld;
using namespace std;
const lld M =1e3+7;
const lld mod=1e9+7;
const lld infi =LLONG_MAX;
lld i,j,ans,k,n,x,y,m,mymax=LLONG_MIN,mymin=LLONG_MAX,b,c,z,sum;
lld dp[M][M],s[M][M];
int main()
{
lld n,k;
ds(n,k);
up(1,k+1,i)
{
s[1][i]=1+s[1][i-1];
}
up(2,n+1,i)
{
up(1,k+1,j)
{
s[i][j]=s[i][j-1]+s[i-1][j];

}
}
pp(s[n][k]);

return 0;
}

关于c++ - (c++) 如何有效地制作升序(dyn.solution),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com