zoukankan      html  css  js  c++  java
  • 失衡天平

    链接:https://www.nowcoder.com/acm/contest/186/C
    来源:牛客网

    终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好???这个时候,一个神秘老人走到她面前答应无偿给她武器,但老人有个条件,需要将所选武器分别放在天平的两端,若天平平衡则可以将天平上的所有武器拿走,还好这个天平锈迹斑斑,只要两端重量相差小于等于m就会保持平衡,Alice傻傻的认为越重的武器越好,求Alice最多能拿走的武器总重量。(不限操作次数)

    输入描述:

    第一行2个整数 n, m;
    第二行n个整数x,分别表示n件武器的重量。
    1 <= n <= 100; 0 <= m <= 100; 1 <= x <= 100;

    输出描述:

    一个整数,表示Alice最多能拿走的武器总重量。
    示例1

    输入

    复制
    5 4
    1 5 61 65 100

    输出

    复制
    132

    说明

    可以称两次,第1次:(1 ; 5),第二次(61 ; 65)。
    示例2

    输入

    复制
    5 0
    10 20 30 40 100

    输出

    复制
    200

    说明

    称一次,(10,20,30,40 ; 100)。

    题意 : 给你n个物品,从中选出任意个,放在天平的两侧,使得天平相差小于 x ,你便可以拥有这些物品,问最终能获得多大的重量,可以操作任意次
    思路分析 :
      首先比较好想到的一点就是在放置时操作多次其实和操作一次最终的效果是一样的
      定义 dp[i][j] , 在第 i 个物品天平两边相差为 j 的最大收益, dp[i][j] = max(dp[i][j], dp[i-1][j]); 不选的情况
                                      dp[i][j+x] = max(dp[i][j+x], dp[i-1][j]+x); // 同侧
                                      dp[i][abs(j-x)] = max(dp[i][abs(j-x)], dp[i-1][j]+x); // 异侧
    代码示例:
    using namespace std;
    #define ll long long
    
    int n, m;
    int dp[105][10005];
    
    int main() {
        //freopen("in.txt", "r", stdin);
        //freopen("out.txt", "w", stdout);
        int x;
        memset(dp, 0x8f, sizeof(dp));
        dp[0][0] = 0;
        
        cin >> n >> m;
        for(int i = 1; i <= n; i++) {
            scanf("%d", &x); 
            for(int j = 0; j <= 10000; j++){
                dp[i][j] = max(dp[i][j], dp[i-1][j]);
                if (j+x <= 10000) dp[i][j+x] = max(dp[i][j+x], dp[i-1][j]+x);
                dp[i][abs(j-x)] = max(dp[i][abs(j-x)], dp[i-1][j]+x); 
            }        
        }
        int ans = 0;
        for(int i = 0; i <= m; i++) ans = max(ans, dp[n][i]);
        printf("%d
    ", ans);
        return 0;
    }
    


    东北日出西边雨 道是无情却有情
  • 相关阅读:
    为什么要用&lt;!DOCTYPE&gt;声明
    [asp.net core] Tag Helpers 简介(转)
    asp.net core输出中文乱码的问题
    探索Aspnetcore+mysql+efcore
    [Redis]发布/订阅
    [Centos 6]升级安装GCC(2)
    [Centos]升级安装GCC
    [小程序]那些icons
    初探微信小程序
    [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/9649813.html
Copyright © 2011-2022 走看看