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
To Be The Best Of Yourself