CCPC - k题(dp)
来源:互联网 发布:网络嗅探器怎么用 编辑:程序博客网 时间:2024/05/08 21:13
本题目的意思:
给定n个位置,每个位置有一个二元组,要求确定n个位置的属性(选1或者是2),使得每个二元组的1属性和2属性去最近的位置,总代价最小(代价 属性值*移动距离)
分析:
可以尝试如此规划,定义d[ i ][ j ]为当前修到了i位置,i位置的属性为j,那么下面的一段连续路径要修的属性为(3-j),这一段路径上的属性为(3-j)的不需要移动,剩下的要移动到两边。
这个题目难得地方在于怎样设计状态使得具有很好的规划性质。
附: 交题点击打开链接
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define rep1(i,x,y) for(int i=x;i<=y;i++)#define rep(i,n) for(int i=0;i<(int)n;i++)using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int N = 4010;int n;struct node{ ll pre[N],pp[N],suf[N],ss[N]; void init() { pre[0]=pp[0]=suf[n+1]=ss[n+1]=0; rep1(i,1,n) pre[i]=pre[i-1]+pre[i],pp[i]=pre[i]+pp[i-1]; for(int i=n; i>=1; i--) suf[i]=suf[i+1]+suf[i],ss[i]=ss[i+1]+suf[i]; } ll get_lr(int i,int j) { int mid=(j-i-1)/2+i , llen = mid-i , rlen = j-mid-1; ll sum = 0; sum+=ss[i+1]-ss[mid+1]-suf[mid+1]*llen; sum+=pp[j-1]-pp[mid]-pre[mid]*rlen; return sum; } ll get(int i,int j) { if(i == 0) return pp[j-1]; else if(j == n+1) return ss[i+1]; return get_lr(i,j); }} T,P;ll d[N][2];bool vis[N][2];ll dp(int i,int j){ if(vis[i][j]) return d[i][j]; vis[i][j] = true; if(i == n) return d[i][j] = 0; int lim = (i==0 ? n-1 : n); rep1(k,i+1,lim) { ll add=(j==0 ? T.get(i,k+1):P.get(i,k+1)); if(k == i+1) d[i][j] = dp(k,j^1)+add; else d[i][j] = min(d[i][j],dp(k,j^1)+add); } return d[i][j];}int main(){ int Ta,kase=1; scanf("%d",&Ta); while(Ta--) { scanf("%d",&n); int x,y; rep1(i,1,n) scanf("%d %d",&x,&y),T.pre[i]=T.suf[i]=x,P.pre[i]=P.suf[i]=y; T.init(); P.init(); memset(vis,false,sizeof(vis)); cout<<"Case #"<<kase++<<": "<<min(dp(0,0),dp(0,1))<<endl; } return 0;}
0 0
- CCPC - k题(dp)
- 2015 CCPC 国赛K题,HDU5550(线性递推DP)
- ccpc杭州K题(hdu5943) Kingdom of Obsession
- 2015年CCPC D题 Pick The Sticks(DP)
- CCPC长春赛区K题 hdu 5921 Binary Indexed Tree
- 【HDU5550 2015 CCPC 南阳国赛K】【DP 脑洞 好题】 Game Rooms 每层楼一属性,所有人各得其所 数轴映射+同属性区间段整体更新
- 【2016-CCPC-K】水题(Lweb and String,hdu 5842)
- 2017CCPC哈尔滨 B:K-th Number(二分)
- 2015 CCPC C题 【树状数组优化dp】
- ccpc Pick The Sticks(dp特殊处理)
- HDU 6156 回文 数位DP(2017CCPC)
- hdu 5927 Auxiliary Set 2016CCPC东北地区大学生程序设计竞赛 - 重现赛 F题(树状dp)
- 2015 CCPC C题(超时代码)
- ccpc合肥A题 hdu5961(bfs)
- HDU-5943-Kingdom of Obsession(杭州CCPC K题)-数学推导+匈牙利算法优化
- 【2016-CCPC-K】匈牙利算法,最大基数匹配(Kingdom of Obsession,hdu 5943)
- HDU 5943 && 2016CCPC杭州 K: Kingdom of Obsession(二分匹配)
- CCPC.2017B.K-th Number
- OC 字典属性和方法
- ios如何将model转换成NSDictionary
- 配置错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的
- Xcode7 之Storybord Reference
- UserScoreSignServiceImpl 代码记录
- CCPC - k题(dp)
- 深入详解Struts2——使用注解配置Action
- HTML5规范之Web Worker入门
- 重力加速度陀螺仪传感器MPU-6050(一)
- 安卓中关于图片的类型
- UserScoreSignService 代码记录
- CocoaPods的使用
- PS通道抠图技术
- 代码性能优化策略