社区讨论

请问怎么滚动数组优化

AT_dp_tPermutation参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m1946cbh
此快照首次捕获于
2024/09/19 17:53
去年
此快照最后确认于
2025/11/04 20:55
4 个月前
查看原帖
优化半天优化不出来,求大佬帮助
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl 
#define lc (rt<<1)
#define rc (rt<<1|1)
const int N=3e3+6,yyx=1e9+7;
vector<int> to[N];
int n,k,a[N];
int dp[N][N];//dp[i][j]表示第i位置中前一个位置数是第j大的排列个数
inline int mod(int x){
    return (x%yyx+yyx)%yyx;
}
inline void solve(){
  cin>>n;
  string s;cin>>s;
  dp[1][1]=1;
  rep(i,2,n){
    if(s[i-2]=='<'){
      rep(j,1,i) dp[i][j]=mod(dp[i][j-1]+dp[i-1][j-1]);
    }
    else{
      rep_(j,i-1,1) dp[i][j]=mod(dp[i][j+1]+dp[i-1][j]);
    }
  }
  int ans=0;
  rep(i,1,n) ans=mod(ans+dp[n][i]);
  cout<<ans<<endl;
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...