poj 2609 双塔DP-输出路径-用前缀和压缩状态

题目链接:http://poj.org/problem?id=2609
题目大意:有一个长度为m的两个车厢。有一排车,必须按顺序驶入车厢(左右任选)但是不能超过m长度。问最多装多少。如果第i辆车装不下,那么后面的车都不能再装。
图片说明
思路:用f[i][j][k]:表示前i辆车左车厢长度为j,右车厢长度为k的状态是否存在。因为j+k==sum[i]。所以可以降一维。

#include  <map>
#include  <set>
#include  <cmath>
#include  <queue>
#include  <cstdio>
#include  <vector>
#include  <climits>
#include  <cstring>
#include  <cstdlib>
#include  <iostream>
#include  <algorithm>
using namespace std;

int f[510][15010], g[510][15010];
int a[510], sum[510];
int main() {

    int m; scanf("%d", &m);
    m*=100;
    int n=0, x;
    while(1){
        scanf("%d", &x);
        if(x==0){
            break;
        }
        a[++n]=x;
    }
    for(int i=1; i<=n; i++){
        sum[i]=sum[i-1]+a[i];
    }
    f[0][0]=1;
    int mx=0, sx=0;
    for(int i=0; i<n; i++){
        for(int s=0; s<=15000; s++){
            if(f[i][s]){

                int L=s, R=sum[i]-L;
                if(L+a[i+1]<=m){
                    f[i+1][L+a[i+1]]=1;
                    g[i+1][L+a[i+1]]=1;
                    mx=i+1, sx=L+a[i+1];
                }
                if(R+a[i+1]<=m){
                    f[i+1][L]=1;
                    g[i+1][L]=2;
                    mx=i+1, sx=L;
                }
               //cout<<i<<" "<<s<<endl;
            }
        }
    }
    printf("%d\n", mx);
    vector<char*> ans;
    while(mx){
        if(g[mx][sx]==1){
            ans.push_back("port");
            sx-=a[mx];
            mx--;
        }
        else{
            ans.push_back("starboard");
            mx--;
        }
    }
    for(int i=ans.size()-1; i>=0; i--){
        printf("%s\n", ans[i]);
    }

    return 0;
}
全部评论

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
炬火初现:肯定是说本科能有好工作或者满意的可以不读研啊,现在本科能找到好工作的那个不优秀,大学四年赛高中,而且还要和学校斗智斗勇,这种时候自然有的选,要是只是觉得一辈子混口饭吃,大概率也考不上研,或者考上又浑浑噩噩三年,也难说。 而且考研所谓的优势说实话是你用差不多四年的时间成本(考一年,读三年)换过来的,而且还未必读完有今年的就业市场,当然不能随便决定读。 再还要看专业,一些稀奇古怪的专业说实话根本没有办法创造出什么价值,也没钱赚(如果有爱好,可以适当降低报酬标准)。现在非92的研究生说实话也没啥太多所谓优势,难说。 所以任何时候都要具体情况具体分析,不能一概而论。 一点点小看法。欢迎大家友善讨论。
点赞 评论 收藏
分享
06-06 03:40
已编辑
电子科技大学 Java
在秋招的小白菜很想养修勾:一眼 苍穹外卖+谷粒商城,项目换一换吧,可以找一些付费知识星球博主带带,避免烂大街。多投投大厂,背背八股,你这学历乱杀了,等实习经验到位,到时候大厂闭眼选
投递美团等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务