POJ 1018 Communication System(DP)
2016-03-07 09:32
267 查看
讲道理,在没有给出每个装置的B范围不应该用这样的方法过题的,最正确的想法应该是枚举
#include<iostream> #include<cstdio> #include<set> #include<string> #include<string.h> #include<cstring> #include<vector> #include<map> #include<queue> #include<stack> #include<cctype> #include<algorithm> #include<sstream> #include<utility> #include<cmath> #include<functional> #define mt(a) memset(a,0,sizeof (a)) #define fl(a,b,c) fill(a,b,c) #define SWAP(a,b,t) (t=a,a=b,b=t) #define inf 1000000000+7 using namespace std; typedef long long ll; int dp[120][2000]; int main() { int T; cin >> T; while (T--) { int n; int bb[120], pp[120]; cin >> n; int maxx = -1; for (int i = 0; i < 120; i++) fill(dp[i], dp[i] + 2000, inf); for (int i = 1; i <= n; i++) { int m; cin >> m; for (int j = 0; j < m; j++) { scanf("%d %d", &bb[j], &pp[j]); maxx = max(maxx, bb[j]); } if (i == 1) { for (int k = 0; k < m; k++) dp[1][bb[k]] = pp[k]; continue; } else { for (int j = 0; j <= maxx; j++) { if (dp[i - 1][j] != inf) { for (int k = 0; k < m; k++) { if (dp[i - 1][j] + pp[k] < dp[i][min(j, bb[k])]) dp[i][min(j, bb[k])] = dp[i - 1][j] + pp[k]; } } } } } double ans = 0; for (int i = 0; i <=maxx; i++) { if (dp [i]!=inf) ans = max(i*1.0 / dp [i],ans); } printf("%.3f\n",ans); } return 0; }
相关文章推荐
- android应用编译过程图解
- SSH 正向/反向代理小记
- 使用 MFC 编写打印程序
- Python 与设置代理的两三事
- CocoaPods 安装 使用及常见错误
- NSDate+Helper 获取时间的方法
- ProgressBar简单应用
- 文件下载[异步]
- 《超实用的代码片段》
- UVALive 2191 水一发树状数组
- android开发游记:百度地图SDK路线规划和自定义地图UI覆盖物及弹出窗
- 工作日志
- html BOM、DOM
- 【集合框架】JDK1.8源码分析之LinkedHashMap(二)
- 单例模式
- Android布局中 android:layout_gravity="bottom";为何不起作用?
- Ext的DWRProxy应用事例
- java中不能用小数点(.)来做分隔符
- Android--点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失
- Android中常用布局单位