警示后人
查看原帖
警示后人
579109
LiDingguang楼主2024/10/24 14:42
#include<bits/stdc++.h>
using namespace std;
int n,m,a[351],b[5],dp[351][40][40][40],inn;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=0;i<m;i++){
        cin>>inn;
        b[inn]++;
    }
    dp[1][0][0][0]=a[1];
    for(int i=2;i<=n;i++){
        for(int b1=0;b1<=b[1];b1++){
            for(int b2=0;b2<=b[2];b2++){
                for(int b3=0;b3<=b[3];b3++){
                    if((i-b1-b2*2-b3*3-1)%4!=0){
                        continue;
                    }
                    int b4=(i-b1-b2*2-b3*3-1)/4;
                    if(b4<0||b4>b[4]){
                        continue;
                    }
                    if(b1-1>=0&&i-1>=1){
                        dp[i][b1][b2][b3]=dp[i-1][b1-1][b2][b3]+a[i];
                    }
                    if(b2-1>=0&&i-2>=1){
                        dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-2][b1][b2-1][b3]+a[i]);
                    }
                    if(b3-1>=0&&i-3>=1){
                        dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-3][b1][b2][b3-1]+a[i]);
                    }
                    if(b4-1>=0&&i-4>=1){
                        dp[i][b1][b2][b3]=max(dp[i][b1][b2][b3],dp[i-4][b1][b2][b3]+a[i]);
                    }
                }
            }
        }
    }
    cout<<dp[n][b[1]][b[2]][b[3]];
    return 0;
}

在c++中,%优先级是先于+-*÷的。

使用时记得加括号!!!

因为这个调了好一会。。。

2024/10/24 14:42
加载中...