0
点赞
收藏
分享

微信扫一扫

笔面试算法--动态规划(不相邻取数(重点)、abb型子序列(重点)、小红取数(重点) 、宵暗的妖怪(重点)、小红的树 (重点))

weipeng2k 2022-03-13 阅读 27

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<limits.h>
#include<set>
#include<cstring>
#include<string>
#include<numeric>
#include <typeinfo>
#define inf 0x3f3f3f3f
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
int n,a[200010];
int dp[200010][2],jg=-1;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
//    dp[0][1]=a[1];
    for(int i=1;i<=n;i++){
        dp[i][0]=dp[i-1][1]+a[i];
        dp[i][1]=max(dp[i-1][0],dp[i-1][1]);
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<2;j++){
            jg=max(jg,dp[i][j]);
        }
    }
    cout<<jg<<endl;
    return 0;
}

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<limits.h>
#include<set>
#include<cstring>
#include<string>
#include<numeric>
#include <typeinfo>
#define inf 0x3f3f3f3f
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
int n;
string s;
ll sum[1000100][26];
int main()
{
    cin>>n;
    cin>>s;
    for(int i=n-1;i>=0;i--){
        for(int j=0;j<26;j++){
            sum[i][j]=sum[i+1][j];
        }
        sum[i][s[i]-'a']=sum[i+1][s[i]-'a']+1;
    }
    ll res=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<26;j++){
            if(s[i]-'a'!=j)
                res+=(sum[i+1][j]-1)*sum[i+1][j]/2;
        }
    }
    cout<<res<<endl;
    return 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<limits.h>
#include<set>
#include<cstring>
#include<string>
#include<numeric>
#include <typeinfo>
#define inf 0x3f3f3f3f
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
int n,k;
ll a[1010];
ll dp[1010][1010];//前i个数取一些数的和模k=j的方案的最大值

int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=0;i<n;i++){
        for(int j=0;j<k;j++){
            dp[i][j]=-1e18;
        }
    }
    dp[0][0]=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<k;j++){
            dp[i][(j+a[i])%k]=max(dp[i-1][j]+a[i],dp[i-1][(j+a[i])%k]);
        }
    }
    if(dp[n][0]<=0)
        cout<<-1<<endl;
    else
        cout<<dp[n][0]<<endl;
    return 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<limits.h>
#include<set>
#include<cstring>
#include<string>
#include<numeric>
#include <typeinfo>
#define inf 0x3f3f3f3f
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
int n;
ll a[100010],dp[100010][2];
int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    dp[1][1]=a[1];
    dp[2][1]=a[2];
    dp[2][0]=a[1];
    for(int i=3;i<n-1;i++){
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]);
        dp[i][1]=max(dp[i-3][0]+a[i],dp[i-3][1]+a[i]);
    }
    cout<<max(dp[n-2][0],dp[n-2][1])<<endl;
    return 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<limits.h>
#include<set>
#include<cstring>
#include<string>
#include<numeric>
#include <typeinfo>
#define inf 0x3f3f3f3f
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
vector<int>g[100010];
int dp[100010],n,q;
string s;
int dfs(int x){
    int sum=s[x-1]=='R';
    for(int i=0;i<g[x].size();i++)
        sum+=dfs(g[x][i]);
    return dp[x]=sum;
}
int main(){
    cin>>n;
    for(int i=2;i<=n;i++){
        int x;
        cin>>x;
        g[x].push_back(i);
    }
    cin>>s;
    dp[1]=dfs(1);
    cin>>q;
    while(q--){
        int x;
        cin>>x;
        cout<<dp[x]<<endl;
    }
    return 0;
}
举报

相关推荐

0 条评论