首页 > 代码库 > 【HDOJ】2195 Monotone SE Min

【HDOJ】2195 Monotone SE Min

简单DP。将[0,1]的浮点数离散化为[0,1000]的整数。最后再除以1000^2.

 1 /* 2195 */ 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5  6 #define MAXN 1000 7 #define MAXL 205 8 #define INF  0xfffffff 9 10 int dp[MAXL][MAXN+5];11 char s[MAXL];12 13 int main() {14     int len;15     int i, j, k;16     int bi, tmp;17     double ans;18     19     #ifndef ONLINE_JUDGE20         freopen("data.in", "r", stdin);21     #endif22     23     while (scanf("%s", s) != EOF) {24         len = strlen(s);25         bi = (s[0]==0) ? 0:MAXN;26         for (j=0; j<=MAXN; ++j) {27             dp[0][j] = (j-bi)*(j-bi);28         }29         for (i=1; i<len; ++i) {30             bi = (s[i]==0) ? 0:MAXN;31             tmp = INF;32             for (j=0; j<=MAXN; ++j) {33                 if (dp[i-1][j] < tmp)34                     tmp = dp[i-1][j];35                 dp[i][j] = tmp + (j-bi)*(j-bi);36             }37         }38         tmp = INF;39         i = len-1;40         for (j=0; j<=MAXN; ++j)41             if (dp[i][j] < tmp)42                 tmp = dp[i][j];43         ans = tmp / 1000000.0;44         printf("%.3lf\n", ans);45     }46     47     return 0;48 }

 

【HDOJ】2195 Monotone SE Min