[多校2015.02.1004 dp] hdu 5303 Delicious Apples
2015-07-24 14:42
197 查看
题意:
在一个长度为L的环上有N棵苹果树,你的篮子容量是K个苹果。
每棵苹果树上都有a[i]个苹果。
问你从0点出发最少要走多少距离能拿完全部的苹果。
思路:
我们考虑dp,dp[0][i]代表顺时针取i个苹果的最短距离。dp[1][i]代表逆时针取i个苹果的最短距离。
那么设苹果的总是为sum
那么ans=dp[0][i]+dp[sum-i] (0<=i<=sum)
代码:
在一个长度为L的环上有N棵苹果树,你的篮子容量是K个苹果。
每棵苹果树上都有a[i]个苹果。
问你从0点出发最少要走多少距离能拿完全部的苹果。
思路:
我们考虑dp,dp[0][i]代表顺时针取i个苹果的最短距离。dp[1][i]代表逆时针取i个苹果的最短距离。
那么设苹果的总是为sum
那么ans=dp[0][i]+dp[sum-i] (0<=i<=sum)
代码:
#include"stdio.h" #include"algorithm" #include"string.h" #include"iostream" #include"queue" #include"map" #include"vector" #include"string" #include"cmath" using namespace std; #define ll __int64 ll l; struct node { int x,s; } ap[123456]; ll dp[2][123456]; int cmp(node a,node b) { return a.x<b.x; } int main() { int t; cin>>t; while(t--) { int n,k; scanf("%I64d%d%d",&l,&n,&k); for(int i=0; i<n; i++) scanf("%d%d",&ap[i].x,&ap[i].s); memset(dp,0,sizeof(dp)); sort(ap,ap+n,cmp); int tep=1,sum=0; //tep代表取了几个苹果 因为一定是递增的 for(int i=0; i<n; i++) { for(int j=0; j<ap[i].s; j++) { if(tep-k<0) dp[0][tep]=dp[0][0]+min(l,2LL*ap[i].x); else dp[0][tep]=dp[0][tep-k]+min(l,2LL*ap[i].x); tep++; } } tep=1; for(int i=n-1; i>=0; i--) { sum+=ap[i].s; for(int j=0; j<ap[i].s; j++) { if(tep-k<0) dp[1][tep]=dp[1][0]+min(l,2LL*(l-ap[i].x)); else dp[1][tep]=dp[1][tep-k]+min(l,2LL*(l-ap[i].x)); tep++; } } ll ans=999999999999999999LL; for(int i=0;i<=sum;i++) ans=min(ans,dp[0][i]+dp[1][sum-i]); printf("%I64d\n",ans); } return 0; }
相关文章推荐
- ios开发中遇到的各种错(一)
- Android 实现动态体温计
- Android开发之Fragment实战应用
- adb连接Android 4.2.2版本手机时出现offline或unauthorized问题的解决方法
- HDU 5303 Delicious Apples(思维题)
- [电子书] 《Android编程入门很简单》
- iOS设备上的App设计规范
- Swift语言实现地图坐标弹跳动画
- Android日历行程
- iOS 图标、图形尺寸?
- Unity Mesh Collider 顶点太多报错
- Android默认输入法语言的修改以及SettingsProvider作用
- iOS地图位置开发
- iOS 实现百度LBS定位
- android技巧:快速重建system.img
- android静态检测工具
- AndroidActionBar入门小测试
- Android--数据库2
- [Android Pro] PackageManager#getPackageSizeInfo (hide)
- IOS中获取各个文件的目录路径的方法和NSFileManager类