zoukankan      html  css  js  c++  java
  • NC19158 失衡天平(背包dp)

    复健牛客每日一题系列

    这题的dp感觉很浓,因为数据范围给的很像dp

    刚开始我被能多次操作困惑了,以为是什么巧妙的贪心

    但是其实多次能拿,一次也能拿,我们可以通过放的位置控制在m之内

    因此这题是一道背包dp,因为每个物品都有三种选择,左边右边或者不放,而第二维状态可以表示为两边的差值

    这题会产生负的,因此我们要对区间进行平移

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=1e6+10;
    const int mod=1e9+7;
    int a[N],f[110][20020];
    int main(){
        ios::sync_with_stdio(false);
        int n,m;
        cin>>n>>m;
        int i,j;
        memset(f,-0x3f,sizeof f);
        f[0][10000]=0;
        for(i=1;i<=n;i++)
            cin>>a[i];
        int ans=0;
        for(i=1;i<=n;i++){
            for(j=0;j<=20000;j++){
                f[i][j]=max(f[i][j],f[i-1][j]);
                if(j+a[i]<=20000){
                    f[i][j]=max(f[i][j],f[i-1][j+a[i]]+a[i]);
                }
                if(j-a[i]>=0){
                    f[i][j]=max(f[i][j],f[i-1][j-a[i]]+a[i]);
                }
            }
        }
        for(i=0;i<=m;i++){
            ans=max(ans,f[n][10000+i]);
            ans=max(ans,f[n][10000-i]);
        }
        cout<<ans<<endl;
        return 0;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    CSS同时选择器
    create-react-app之proxy
    mysql limit语句
    给tbody加垂直滚动条的具体思路
    MySql数据类型范围
    block、inline、inline-block
    javascript sourcemap
    session of express
    React中innerHTML的坑
    box-sizing
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/14392296.html
Copyright © 2011-2022 走看看