【动态规划】XMU 1032 装配线问题

来源:互联网 发布:淘宝店装修视频2016 编辑:程序博客网 时间:2024/06/08 09:54
题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1032

题目大意

  一个物品在2条生产线上加工,每条线上n(n<=1000)个节点,加工耗时为Ai,j(i=1,2;j=1 2....n)

  从其中一个节点转移到另一条生产线相同节点位置需要耗时Ti,j(i=1,2;j=1 2....n)

  放上生产线和放下生产线还需要e1,e2和x1,x2的时间。求最少加工时间。

题目思路:

  【动态规划】

  动态规划比较明显,f[j][i]表示在第j条生产线上加工到第i个节点的最少耗时

  只可能从j或者1-j的i-1号节点转移得到。状态方程很容易推出。


////by coolxxx//#include<iostream>#include<algorithm>#include<string>#include<iomanip>#include<memory.h>#include<time.h>#include<stdio.h>#include<stdlib.h>#include<string.h>//#include<stdbool.h>#include<math.h>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define lowbit(a) (a&(-a))#define sqr(a) ((a)*(a))#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))#define eps (1e-8)#define J 10000000#define MAX 0x7f7f7f7f#define PI 3.1415926535897#define N 1004using namespace std;typedef long long LL;int cas,cass;int n,m,lll,ans;int e1,e2,x1,x2;int a[2][N],t[2][N],f[2][N];int main(){#ifndef ONLINE_JUDGE//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);#endifint i,j,k,l;//for(scanf("%d",&cas);cas;cas--)//for(scanf("%d",&cas),cass=1;cass<=cas;cass++)//while(~scanf("%s",s))while(~scanf("%d",&n)){scanf("%d%d%d%d",&e1,&e2,&x1,&x2);for(i=1;i<=n;i++)scanf("%d",&a[0][i]);for(i=1;i<=n;i++)scanf("%d",&a[1][i]);for(i=1;i<n;i++)scanf("%d",&t[0][i]);for(i=1;i<n;i++)scanf("%d",&t[1][i]);f[0][1]=e1+a[0][1];f[1][1]=e2+a[1][1];for(i=2;i<=n;i++){for(j=0;j<2;j++){f[j][i]=min(f[j^1][i-1]+t[j^1][i-1]+a[j][i],f[j][i-1]+a[j][i]);}}f[0][n]+=x1;f[1][n]+=x2;ans=min(f[0][n],f[1][n]);printf("%d\n",ans);}return 0;}/*////*/


0 0