• codeforces727F Polycarp's problems(dp)


    题意:

    给你一个长度为n(750)的数列,数的范围是(1e9—1e9),必须按顺序从左端走到右端,

    每到一个位置,当前的值就加上当前位置的值,给你m(2e5)个询问,每个询问给你一个初始值,

    问你至少要去掉几个位置的值才能保证行进过程中不会出现负数

    思路:

    http://blog.csdn.net/aufeas/article/details/53031439

    大神的dp思路

    令f[i][j]表示从第i~n个问题中留下 j 个问题所需要的最小心情值,这样我们只需要知道过程中的心情值即可,

    因为最后的心情值不会用到。于是得到转移方程f[i][j]=min(f[i+1][j],max(0,f[i+1][j-1]-a[i])。

    最后在f[1]上查找答案即可。 时间复杂度:O(n^2+m*logn)

    /* ***********************************************
    Author        :devil
    ************************************************ */
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <stack>
    #include <map>
    #include <unordered_map>
    #include <string>
    #include <time.h>
    #include <cmath>
    #include <stdlib.h>
    #define LL long long
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    #define dep(i,a,b) for(int i=a;i>=b;i--)
    #define ou(a) printf("%d
    ",a)
    #define pb push_back
    #define pii pair<int,int>
    #define mkp make_pair
    #define IN freopen("in.txt","r",stdin);
    #define OUT freopen("out.txt","w",stdout);
    using namespace std;
    const int inf=0x3f3f3f3f;
    const int mod=1e9+7;
    const int N=1e3+10;
    int n,m,a[N];
    LL dp[N][N],x;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        memset(dp,inf,sizeof(dp));
        dp[n+1][0]=0;
        for(int i=n;i>0;i--)
            for(int j=0;j<=n-i+1;j++)
            {
                dp[i][j]=dp[i+1][j];
                if(j) dp[i][j]=min(dp[i][j],max(dp[i+1][j-1]-a[i],0ll));
            }
        for(int i=1;i<=m;i++)
        {
            scanf("%lld",&x);
            printf("%d
    ",n-(upper_bound(dp[1],dp[1]+n+1,x)-dp[1]-1));
        }
        return 0;
    }
  • 相关阅读:
    GPU 版 TensorFlow failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
    Python -- 值转换为字符串的两种机制
    Python
    vim中注释多行python代码
    HTTP协议状态码详解(HTTP Status Code)
    关于Python报错:SyntaxError: Non-ASCII character 'xe5' in file的解决方法
    Linux如何查看进程、杀死进程、启动进程等常用命令
    vim 如何设置显示行号和缩进
    一、报错
    二、极光推送
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/6114941.html
Copyright © 2020-2023  润新知