首页 > 8.17阿里笔试37min 纪念
头像
昵称不可用💭💡🎈
编辑于 2020-08-17 20:00
+ 关注

8.17阿里笔试37min 纪念

后面在这里发代码,先占个坑
大致复盘一下题意:
1 求n个节点 高度不超过m的二叉树的个数 结果%1e9+7
dp
dp[i][j]代表i个结点不超过j的方案数
代码:
#include <bits/stdc++.h>
#define int long long 
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define pre(i,a,b) for(int i=(b);i>=(a);i--)
#define ios ios::sync_with_stdio(false),cin.tie(0);
#define pb push_back
#define ps push
#define fi first
#define se second
#define ps push
#define Inf 0x3f3f3f3f3f3f3f3f
#define eps 1e-5
typedef long long ll;
 
const int N=2e5+5;
const int M=2e5+5;
const int mod=1e9+7;
using namespace std;
ll dp[55][55];
signed main()
{
    int n,h;
    cin>>n>>h;
    for(int i=1;i<=n;i++)
    {  
        dp[0][i-1] = 1;
        for(int j=1;j<=n;j++)
        {
            for(int k=0;k<j;k++) 
            {
                dp[j][i] =(dp[j][i]%mod+ dp[k][i-1] * dp[j-k-1][i-1]%mod)%mod;
            }
        }       
    }
    cout<<dp[n][h]<<endl;
    return 0;
}

2。是有n个物品 k个属性 k不超过10 然后求满足ai1+aj1=ai2+aj2=...aik+ajk的对数
就是做差map映射一下就行了
代码:
#include <bits/stdc++.h>
#define int long long 
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define pre(i,a,b) for(int i=(b);i>=(a);i--)
#define ios ios::sync_with_stdio(false),cin.tie(0);
#define pb push_back
#define ps push
#define fi first
#define se second
#define ps push
#define Inf 0x3f3f3f3f3f3f3f3f
#define eps 1e-5
typedef long long ll;
const int N=2e5+5;
const int M=2e5+5;
const int mod=1e9+7;
using namespace std;
map<vector<int>,int>mp;
int a[15];
signed main()
{
    int n,k;
    cin>>n>>k;
    int ans=0;
    for(int i=1;i<=n;i++){
        vector<int>vec;
        for(int j=1;j<=k;j++){
           cin>>a[j];
        }
        for(int j=2;j<=k;j++){
            vec.push_back(a[j]-a[j-1]);
        }
        ans+=mp[vec];
        for(int j=0;j<vec.size();j++){
            vec[j]=-vec[j];
        }
        mp[vec]++;
    }
    cout<<ans<<endl;
    return 0;
}


全部评论

(25) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐