poj 1180 斜率优化DP
2014-03-22 20:40
399 查看
AC代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; int dp[11000]; int sumt[11000], sumf[11000]; int S, N; int q[11000], head, last; int main(){ while( scanf( "%d", &N ) != EOF ){ cin >> S; for( int i = 1; i <= N; i++ ){ scanf( "%d%d", &sumt[i], &sumf[i] ); } sumt[N+1] = sumf[N+1] = 0; for( int i = N; i >= 1; i-- ){ sumt[i] += sumt[i+1]; sumf[i] += sumf[i+1]; } dp[N+1] = 0; q[0] = N + 1; head = last = 0; // dp = ( S + sumt ) * sumf ; for( int i = N; i >= 1; i-- ){ while( head < last && ( dp[q[head+1]] - dp[q[head]] ) <= ( sumt[q[head+1]] - sumt[q[head]] ) * sumf[i] ){ head++; } dp[i] = dp[q[head]] + ( S + sumt[i] - sumt[q[head]] ) * sumf[i]; while( last > head ){ double temp1 = (double)( dp[i] - dp[q[last]] ) / (double)( sumt[i] - sumt[q[last]] ); double temp2 = (double)( dp[q[last]] - dp[q[last-1]] ) / (double)( sumt[q[last]] - sumt[q[last-1]] ); if( temp1 <= temp2 ){ last--; }else{ break; } } q[++last] = i; } cout << dp[1] << endl; } return 0; }
相关文章推荐
- poj 1180 Batch Scheduling dp斜率优化
- 斜率优化DP(POJ1180 && POJ3709)
- poj 1180 斜率优化dp
- poj 1180 Batch Scheduling 斜率优化dp
- poj 1180 Batch Scheduling ( 斜率优化DP )
- poj 1180:Batch Scheduling【斜率优化dp】
- poj 1180 dp 斜率优化
- POJ - 1180 Batch Scheduling(斜率优化DP)
- POJ 1180 斜率优化DP
- POJ 1180 Batch Scheduling (斜率优化DP)
- Poj1180 Batch Scheduling --- DP的斜率优化
- POJ 1180 Batch Scheduling(斜率优化DP)
- 斜率优化dp(POJ1180 Uva1451)
- Poj1180 Batch Scheduling --- DP的斜率优化
- POJ-1180 Batch Scheduling 【逆向DP+斜率优化】
- POJ 1180 Batch Scheduling(斜率优化DP)
- poj 1180 Batch Scheduling(斜率优化dp或决策单调)
- poj 1180 斜率优化dp
- poj 1180 Batch Scheduling 斜率优化dp
- POJ 3709 K-Anonymous Sequence (斜率优化DP)