dp-poj-1695-Magazine Delivery

2014-11-24 02:39:54 · 作者: · 浏览: 1
题目大意:
需要送报纸给n个位置,有三辆车开始都在第一个位置,开始时可以装任意数量的报纸,每次只能用一辆车,且投送报纸时必须保证前一个位置已经投送。
给出任意两个位置的时间花销,求最短的时间使得所有的位置都投了报纸。
解题思路:
常规dp.
dp[p][q][l][i]表示前i个位置已经投送完毕,并且当前的三辆车所在位置分别为p,q,l.
分别扫描投送完前一个位置时,各车辆所在位置,转移即可。
代码:
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#define eps 1e-6  
#define INF 0x3f3f3f3f  
#define PI acos(-1.0)  
#define ll __int64  
#define LL long long  
#define lson l,m,(rt<<1)  
#define rson m+1,r,(rt<<1)|1  
#define M 1000000007  
#pragma comment(linker, "/STACK:1024000000,1024000000")  
using namespace std;  
  
#define Maxn 35  
  
int dp[Maxn][Maxn][Maxn][Maxn];  
int dis[Maxn][Maxn],n,m;  
  
int main()  
{  
   //freopen("in.txt","r",stdin);  
   //freopen("out.txt","w",stdout);  
   scanf("%d",&m);  
   while(m--)  
   {  
       scanf("%d",&n);  
       memset(dp,INF,sizeof(dp));  
       memset(dis,0,sizeof(dis));  
  
      for(int i=1;i