首页 > 其他 > 详细

九度 1462:两船载物问题

时间:2014-03-08 00:58:57      阅读:448      评论:0      收藏:0      [点我收藏+]

题目描述:

给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品。

 

思路

1. 朴素背包问题

2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总重量 (2) 对载重量较小的船计算dp

3. 一维 dp, dp[i] 表示总物品重量为 i 时的最大价值, 因此 dp[i] 是不连续的, 统计结果时需要遍历 dp. 而二维 dp[][] 则可以填满矩阵

 

代码 未通过九度测试

bubuko.com,布布扣
#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

int n, c1, c2;
int wet[200];
int dp[10000];

int main() {
    while(scanf("%d%d%d", &n, &c1, &c2) != EOF) {
        int totalWeight = 0;
        bool exceed = false;
        
        int biggerone = max(c1, c2);

        for(int i = 0; i < n; i ++) {
            scanf("%d", wet+i);
            totalWeight += wet[i];
            if(wet[i] > biggerone) {
                exceed = true;
            }
        }

        if(exceed) {
            cout << "NO" << endl;
            continue;
        }

        int c = min(c1, c2);

        memset(dp, 0, sizeof(int)*totalWeight);

        for(int i = 0; i < n; i ++) {
            for(int v = c; v >= wet[i]; v --) {
                dp[v] = max(dp[v], dp[v-wet[i]]+wet[i]);
            }
        }

        int carryone;
        for(int i = 0; i <= c; i ++)
            carryone = max(carryone, dp[i]);
        
        if(biggerone >= totalWeight-carryone)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
    return 0;
}
bubuko.com,布布扣

九度 1462:两船载物问题,布布扣,bubuko.com

九度 1462:两船载物问题

原文:http://www.cnblogs.com/xinsheng/p/3586984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!