HDU 1913 Computers

一维DP。

给定买电脑的费用c,给定使用年限n。

题意就是给定m<i,j>(j>=i),表示第i年买的电脑,直到第j年需要的维护费用。

那么就是一个一维DP了,从代码里可以直接看出解题思路的,所以不解释了。

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 #include<stdlib.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<queue>
 8 #include<map>
 9 #include<vector>
10 #include<set>
11 #include<string>
12 
13 #define repA(p,q,i)  for( int (i)=(p); (i)!=(q); ++(i) )
14 #define repAE(p,q,i)  for( int (i)=(p); (i)<=(q); ++(i) )
15 #define repD(p,q,i)  for( int (i)=(p); (i)!=(q); --(i) )
16 #define repDE(p,q,i)  for( int (i)=(p); (i)>=(q); --(i) )
17 #define swap(a,b) { int temp=(a) ; (a)=(b); (b)=temp; }
18 #define ll long long
19 #define range 1000
20 
21 int maintain[range][range];
22 int cost[range];
23 
24 int main()
25 {
26     int c,n;
27     while( scanf("%d%d",&c,&n) != EOF )
28     {
29            repAE(1,n,i)
30              repAE(i,n,j)
31              {
32                scanf("%d",&maintain[i][j]);
33                maintain[i][j] += c ;
34              }
35            cost[0]=0;
36            repAE(1,n,i)
37            {
38                cost[i] = 0x3f3f3f3f;
39                repA(0,i,j)
40                  if( maintain[j+1][i] + cost[j] < cost[i] )
41                    cost[i] = maintain[j+1][i] + cost[j];
42            }
43            printf("%d\n",cost[n]);
44     }
45     return 0;
46 } 
47  
HDU 1913

 

posted on 2013-10-01 09:50  码农之上~  阅读(225)  评论(0编辑  收藏  举报

导航