题意:需要n年都有电脑用,有两种方法,一种是修理电脑,一种是换新电脑。一台新电脑价值为c,第i台电脑在第i年发行,将它维修至第j年的费用会告诉你,求最低消费。
题解:dp[i]为前i年都有电脑用的最小花费,那么dp[i]=min(dp[j-1]+c+a[j][i]),即前j-1年有电脑用的最小花费加上买第j年电脑一直用到第i年的花费中取一个最小值。
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N=1005; 6 int dp[N],a[N][N]; 7 int main() 8 { 9 int c; 10 while(scanf("%d",&c)!=EOF) 11 { 12 int n; 13 scanf("%d",&n); 14 for(int i=1;i<=n;i++) 15 for(int j=i;j<=n;j++) 16 scanf("%d",&a[i][j]); 17 memset(dp,0x3f,sizeof(dp)); 18 dp[0]=0; 19 for(int i=1;i<=n;i++) 20 { 21 for(int j=1;j<=i;j++) 22 { 23 dp[i]=min(dp[i],dp[j-1]+c+a[j][i]); 24 } 25 } 26 printf("%d\n",dp[n]); 27 } 28 return 0; 29 }