首页 > 其他 > 详细

ZOJ 3554 A Miser Boss

时间:2014-03-26 06:06:05      阅读:417      评论:0      收藏:0      [点我收藏+]

dp。

dp[i][j][k] :i表示前i个工件,j表示在A工作台上的耗时-B工作台上的耗时,k表示在A工作台上的耗时-C工作台上的耗时。

dp[i][j+a[i]][k+a[i]]=min(dp[i-1][j][k]+a[i],dp[i][j+a[i]][k+a[i]]);
dp[i][j-b[i]][k]=min(dp[i-1][j][k]+b[i],dp[i][j-b[i]][k]);
dp[i][j][k-c[i]]=min(dp[i-1][j][k]+c[i],dp[i][j][k-c[i]]);
bubuko.com,布布扣
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;

const int INF=0x3f3f3f3f;

int dp[45][250][250];
int a[45],b[45],c[45];
int n;

int main()
{
    while(scanf("%d",&n)==1) {
        memset(dp,0x3f,sizeof dp);
        dp[0][120][120]=0;
        for(int i=1;i<=n;++i)
            scanf("%d%d%d",a+i,b+i,c+i);
        for(int i=1;i<=n;++i) {
            for(int j=0;j<=240;++j) {
                for(int k=0;k<=240;++k) {
                    if(dp[i-1][j][k]!=INF) {
                        dp[i][j+a[i]][k+a[i]]=min(dp[i-1][j][k]+a[i],dp[i][j+a[i]][k+a[i]]);
                        dp[i][j-b[i]][k]=min(dp[i-1][j][k]+b[i],dp[i][j-b[i]][k]);
                        dp[i][j][k-c[i]]=min(dp[i-1][j][k]+c[i],dp[i][j][k-c[i]]);
                    }
                }
            }
        }
        if(dp[n][120][120]!=INF)
            printf("%d\n",dp[n][120][120]/3);
        else puts("NO");
    }
}
bubuko.com,布布扣

ZOJ 3554 A Miser Boss,布布扣,bubuko.com

ZOJ 3554 A Miser Boss

原文:http://www.cnblogs.com/morimiya/p/3624626.html

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