问题标题: 酷町堂:1108 楼梯30分!!

0
0
已解决
曹博扬
曹博扬
初级天翼
初级天翼

30分

代码:

#include<iostream>
#include<iomanip>
#include<cstring>
#include<algorithm>
using namespace std;
int n,f[205][205][205],ans;
int dfs(int n,int pos,int t){
    //if(n<0) return 0;
    if(f[n][pos][t]!=-1) return f[n][pos][t];
    if(n==0&&pos>1){
        ans++;
        //cout<<endl;
        return f[n][pos][t]=0;
    }   
    for(int i=t;i<=n;i++){
        if(n-i<0) return 0;
        //cout<<i<<" ";
        dfs(n-i,pos+1,i+1);
    }
    return f[n][pos][t]=ans;
}
int main(){
    memset(f,-1,sizeof(f));
    cin>>n;
    cout<<dfs(n,0,1);
    return 0;
} 

快很急!!!

回答得好会加豆!!!!!!!!


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

人家这意思分明让你背包求方案总数...

0
0
朱优扬
朱优扬
中级天翼
中级天翼

QQ私发给你了

朱优扬在2021-09-05 14:57:33追加了内容

我的思路:

输入n,遍历第一列的数量进行搜索 

若n=5,为奇数: 则第一列要取到2
若n=6,为偶数: 则第一列要取到2 
5/2=2
6/2=3-1=2

=> (5-1)/2=2
=> (6-1)/2=2
  
=> (n-1)/2
  
=> 遍历到(n-1)/2进行深搜




搜索当前第一列为i个方块时的摆放数量
从start+1开始遍历到ans,尝试每种方式,ans-=当前的方块数量

 

我要回答