GUTC 2019/9/22题目

T1 潘

较水吧,直接区间dp

dp[i][j]显然表示区间答案,开头预处理出一个的和两个的

考虑转移

若当前的str[i]==str[j],必可以和原来的最后一段形成回文,然后一起删掉

若str[i]!=str[j],就枚举断点就ok了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[1005][1005],n;
string str;
signed main() {
    for (int i=0;i<1000;++i) {
        for (int j=0;j<1000;++j) {
            dp[i][j]=1000000000;
        }
    }
    cin>>n>>str;
    for (int i=0;i<=n;++i) dp[i][i]=1;
    for (int i=0;i<n-1;++i) {
        if (str[i]==str[i+1]) dp[i][i+1]=1;
        else dp[i][i+1]=2;
    }
    for (int len=3;len<=n;++len) {
        for (int i=0;i+len<=n;++i) {
            int j=i+len-1;
            if (str[i]==str[j]) dp[i][j]=dp[i+1][j-1];
            for (int k=i;k<j;++k) {
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
            }
        }
    }
    printf("%lld\n",dp[0][n-1]);
    return 0;
} 

T2 膜

考虑这题的复杂度差不多是O(n3),想到了神奇的floyd

这题还是挺巧的,但想到了还是挺好理解的

考虑怎么离线下来,把每条边权赋为当前的次数,然后把floyd改为求最大值

最后再求一下每个次数的有多少个就ok了

扫描二维码关注公众号,回复: 7379262 查看本文章

记得最后要记个前缀和,因为如果前面可以了,后面则也可行

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int INF=1000000000;
int n,m,f[405][405],ans[160005];
signed main() {
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) f[i][j]=INF;
    for(int i=1;i<=m;++i) {
        int u,v;
        scanf("%lld%lld",&u,&v);
        f[u][v]=i;
    }
    for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) {
        if(i==k) continue;
        for(int j=1;j<=n;++j) {
            if(j==i||j==k)continue;
            f[i][j]=min(f[i][j],max(f[i][k],f[k][j]));
        }
    }
    for(int i=1;i<=n;++i) {
        for(int j=1;j<=n;++j) {
            if(f[i][j]!=INF) ans[f[i][j]]++;
        }
    }
    for(int i=1;i<=m;++i) {
        ans[i]+=ans[i-1];
        printf("%lld ",ans[i]);
    }
    return 0;
}

T3 天

比较好玩,就是没做过这种题的一般想不到(想到的一般都是像pmt,gh,杜神,于神这种教主了吧qwq)

康康数据范围:10!!!

第一眼感觉是数学,但是数学题n才1e6???

然后想想,O(n)做法,结果失败了

经pmt一说,豁然开朗!!!pmt txdy!!!

原来建个图,考虑%n情况下,每个数可以到哪几个数

猜你喜欢

转载自www.cnblogs.com/sunyx20060115/p/11600875.html