HDU 4395 D-mail(DP)
来源:互联网 发布:c语言运算符结合方向 编辑:程序博客网 时间:2024/05/15 20:04
题目链接:Click here~~
题意:
给 n 个数字,选取一些取它们的和 S,取和的过程中 S 不能超过2,求出最接近目标数字 D 的 S。(数字均为 4 位小数)
解题思路:
很明显的 dp 模型,状态 dp[i][j] 表示前 i 个数字是否能取到和为 j 的情况。
由于条件的限制,第一维可以滚动,第二维的有效区间为 [-20,2] , 映射成整数是 [-200000,20000],再向右平移得到 [0,220000]。
由于 “取和的过程中 S 不能超过2” ,那么采取贪心的策略,先取小的,即对 w 排序后再 dp。
需要注意的是:1、double 转 int 时还要加个 eps。 2、由于使用了滚动数组,当 w[i] 为负数时 循环的方向要改变。
思路明朗后,代码也不难。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int N = 2e5 + 2e4;const int shift = 2e5;bool reach[N];int w[205];inline int read(){ double x; scanf("%lf",&x); if(x > 0) return x * 10000 + 1e-8; else return x * 10000 - 1e-8;}int main(){ int T,n; scanf("%d",&T); while(T--) { memset(reach,false,sizeof(reach)); int goal = read(); scanf("%d",&n); for(int i=0;i<n;i++) w[i] = read(); sort(w,w+n); reach[ 0 + shift ] = true; for(int i=0;i<n;i++) { bool f = w[i] > 0; if(f) { for(int j=N-1-w[i];j>=0;j--) if(reach[j]) reach[ j + w[i] ] = true; } else { for(int j=-w[i];j<N;j++) if(reach[j]) reach[ j + w[i] ] = true; } } int i = goal + shift , j = 0; int ans = -1; while(1) { if(i-j >= 0 && reach[i-j]) { ans = i - j; break; } if(i+j < N && reach[i+j]) { ans = i + j; break; } ++j; } printf("%.4f\n",(ans-shift)/10000.0); } return 0;}
- HDU 4395 D-mail(DP)
- HDU 4395 D-mail
- HDU 5693:D Game(区间DP)
- HDU 3555 D - Bomb(数位dp)(模板)
- hdu 5639 D Game 区间dp
- HDU 1058 D - Humble Numbers dp
- hdu 4576 D - Robot dp+滚动数组
- HDU 5693 D Game 区间dp
- HDU 5693 D Game(区间dp)
- 数位dp专题 (HDU 4352 3652 3709 4507 CodeForces 55D POJ 3252)
- Hdu 5115 ---区间dp(2014北京现场赛D题)
- HDU 5569 长度为n的上升子序列个数d (大数模板+DP)
- hdu 1074 状态压缩DP 贪心错的原因(D)
- D - Cut Ribbon (dp)
- codeforces105 D(概率dp)
- CodeForces 10D(DP)
- codeforces 682D(DP)
- Codeforces-Goodbye2016-D(DP)
- linux守护进程模型 之 代理功能
- awk使用 第7部分 awk对多行数据的处理实例
- 在C++中一个类对象究竟占用多少内存
- 谷歌三大核心技术(二)Google MapReduce中文版
- 在Android C/C++层添加LOG调试输出调试
- HDU 4395 D-mail(DP)
- Spring Batch之复合格式文件的读写
- java 实现SSL双向认证
- Android开发 WebView新窗口中打开链接
- C++学习 构造函数与复制构造函数
- 动作游戏设计三部曲 之一 交互至上
- 异或的妙用
- SQL大数据
- ZendFrame实现一个投票模块