动态规划intermediate:UVa 10239
来源:互联网 发布:真探 知乎 编辑:程序博客网 时间:2024/04/29 15:16
一开始看错题了,以为书是任意排列的,结果怎么样也搞不出状态方程……后来看了题解才发现顺序是固定的,这样这题就成水题了……
状态转移方程为:dp[cur]=min{dp[i]+max{h[j]|cur<=j<i}|cur<i<n}
为了避免精度问题,可以把浮点数转化为整数来做就行了。
#include <iostream>#include <fstream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;#define M 1010int n,W;int h[M],w[M];char str[M];int dp[M];int dfs(int cur){ if(dp[cur]!=-1) return dp[cur]; if(cur==n) return dp[cur]=0; int &ans=dp[cur]; ans=1<<30; int mh=0,sum=0; for(int i=cur;i<n;i++) { sum+=w[i]; mh=max(mh,h[i]); if(sum>W) break; ans=min(ans,dfs(i+1)+mh); } return ans;}int main(){ freopen("in.txt","r",stdin); while(gets(str)!=NULL&&str[0]!='0') { int a,b; sscanf(str,"%d %d.%d",&n,&a,&b); W=10000*a+b; for(int i=0;i<n;i++) { gets(str); int a1,b1,a2,b2; sscanf(str,"%d.%d %d.%d",&a1,&b1,&a2,&b2); h[i]=10000*a1+b1; w[i]=10000*a2+b2; } memset(dp,-1,sizeof(dp)); printf("%.4f\n",(double)dfs(0)/10000); } return 0;}
- 动态规划intermediate:UVa 10239
- 动态规划intermediate:UVa 11456
- 动态规划intermediate:UVa 10604
- 动态规划专项intermediate:UVa 10271
- 动态规划专项intermediate:UVa 10304
- 动态规划专项intermediate:UVa 11600
- 动态规划专项intermediate:UVa 10934
- 动态规划专项intermediate:UVa 10981
- 动态规划专项intermediate:UVa 12002
- 动态规划专项intermediate:UVa 10688
- 动态规划专项intermediate:UVa 11766
- 动态规划专项intermediate:UVa 11400
- 动态规划专项intermediate:UVa 10599
- 动态规划intermediate:LA 4945
- 动态规划intermediate:LA 6042
- 动态规划专项intermediate:LA 4015
- 动态规划专项intermediate:LA 4490
- 动态规划专项intermediate:LA 4327
- Android 经典示例,初学者的绝好源码资料
- 十个习惯让你精通新的开发技术
- 第七周-项目2-成员函数.有元函数,和一般函数之区别
- 查找数组中子数组最大和
- 数字字母组合生产的图片验证码方法
- 动态规划intermediate:UVa 10239
- django集成fabric
- soap11
- hdu-1276
- 关于 android 中 edittext 特殊字符过滤和字符长度限制的最优方法
- ShellExecute, WinExec, CreateProcess区别
- oracle性能如何调整,如何回收表空间碎片
- 最小风险贝叶斯决策在广告微博过滤的实现算法
- IPC Port 'Access is denied'