zoukankan      html  css  js  c++  java
  • codeforces 1077F1

    题目:https://codeforces.com/contest/1077/problem/F1

    题意:

    你有n幅画,第i幅画的好看程度为ai,再给你两个数字k,x 表示你要从中选出刚好x幅画,并且相邻选的两幅画之间没选画的个数不能≥k,求好看程度之和最大能多少

    题解:

    我选了第i 副画,那么我接下来的k副画是都可以选的,定义状态为,前i副画我选了j个,第i副画为必须选的画

    然后扫一遍必须选x副画后可以得到的最大值是多少

    转移方程:

    dp[i][j]=max(dp[i][j-1]+a[i],dp[i][j]);

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 205;
    const int INF=0x3f3f3f3f;
    typedef long long ll;
    ll dp[maxn][maxn];
    int a[maxn];
    int main(){
        int n,k,x;
        scanf("%d%d%d",&n,&k,&x);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        memset(dp,-1*INF,sizeof(dp));
        dp[0][0]=0;
        for(int i=1;i<=n;i++){
            for(int j=i-1;j>=max(i-k,0);j--){
                for(int m=1;m<=x;m++){
                    //第i个选了j个后第i个必须选的值是多少
                    dp[i][m]=max(dp[j][m-1]+a[i],dp[i][m]);
                }
            }
        }
        ll ans=-1;
        //第x个必须选的最大值即是答案
        for(int i=n;i>n-k;i--){
            if(dp[i][x]) ans=max(ans,dp[i][x]);
        }
        cout<<ans<<endl;
    }
    View Code
    每一个不曾刷题的日子 都是对生命的辜负 从弱小到强大,需要一段时间的沉淀,就是现在了 ~buerdepepeqi
  • 相关阅读:
    相关系数
    T检验
    Python模块常用的几种安装方式
    DOM与SAX读取XML方式的不同
    Base64编码
    node.js网页爬虫
    Node.js Express 框架
    Node.js Web 模块
    Node.js GET/POST请求
    Node.js 常用工具
  • 原文地址:https://www.cnblogs.com/buerdepepeqi/p/9972795.html
Copyright © 2011-2022 走看看