UVa 12589 Learning Vector
来源:互联网 发布:java工厂方法设计模式 编辑:程序博客网 时间:2024/05/22 08:53
题意:有n个向量(0 <= x,y <= 50),选出其中的K个(n,k <= 50) 围成的面积最大为多少?
思路:先确定一点,对于选出的k个向量,按斜率从大到小的顺序摆放,面积最大。(不然会损失几个平行四边形的面积) 然后DP , DP[id][cur][height] 分别表示前id个向量,已经选出了cur个向量,高度为height的最大面积。面积计算公式为 x0*y0 + 2*x1*y0+x1*y1 + 2*x2*(y0+y1)........用记忆化搜索注意初始化的优化!
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 50+10;const int INF = 1e9;int dp[maxn][maxn][2600];int vis[maxn][maxn][2600];struct Vector{ int x,y; Vector(int x = -1,int y = -1):x(x),y(y){} friend bool operator < (Vector a,Vector b) { return a.y*b.x > a.x*b.y; }};Vector V[maxn];int n,k;int plu;int ans;int dfs(int id,int cur,int hi) { if(cur==k) return 0; if(id==n) return -INF; if(vis[id][cur][hi] == plu) return dp[id][cur][hi]; vis[id][cur][hi] = plu; int ans = 0; if(ans < dfs(id+1,cur,hi)) ans = dfs(id+1,cur,hi); if(ans < dfs(id+1,cur+1,hi+V[id].y)+2*V[id].x*hi+V[id].x*V[id].y) ans = dfs(id+1,cur+1,hi+V[id].y)+2*V[id].x*hi+V[id].x*V[id].y; return dp[id][cur][hi] = ans;}void input() { ans = 0; scanf("%d%d",&n,&k); int sum = 0; for(int i = 0; i < n; i++) { scanf("%d%d",&V[i].x,&V[i].y); sum += V[i].y; } sort(V,V+n);}void solve() { plu++; ans = dfs(0,0,0); printf("%d\n",ans);}int main() { int ncase,T=1; cin >> ncase; memset(vis,0,sizeof vis); plu = 1; while(ncase--) { input(); printf("Case %d: ",T++); solve(); } return 0;}
1 0
- UVa 12589 Learning Vector
- uva 12589 Learning Vector
- UVa 12589 Learning Vector
- Uva-12589 Learning Vector
- uva 12589 learning vector
- UVA 12589 Learning Vector
- Learning Vector - UVa 12589 dp
- UVA - 12589(learning vector dp)
- [UVA 12589]Learning Vector[DP]
- UVA 12589 Learning Vector 解题报告
- UVA 12589 Learning Vector(DP)
- uva 12589——Learning Vector
- Learning Vector UVA
- Learning Vector
- uva 10797 learning portugues
- [Machine Learning]--Support Vector Machine
- UVa 400 模拟vector
- 变长vector uva 101
- 在首页调出商品模型里的产品价格 dedecms商品价格调用
- 避免Android关屏的方法
- 程序员学习能力提升三要素
- iOS中如何呼出另外一个应用
- Xcode5 上使用Base SDK iOS6程序和iOS6模拟器
- UVa 12589 Learning Vector
- 织梦Dedecms删除栏目后,新建ID不从1开始(ID不连续)
- 将博客搬至CSDN
- UI——onWindowFocusChanged重要作用(笔记)
- NULL, '\0',0 '0'的区别
- Cocos2d-x计算字符串Size方法
- 解决git clone提示Permission denied publickey 问题
- 等待队列
- 在android编程中出现R cannot be resolved to a variable