UVa 10131 - Is Bigger Smarter?
来源:互联网 发布:js获取手机mac地址 编辑:程序博客网 时间:2024/06/11 19:44
题目链接:UVa 10131 - Is Bigger Smarter?
LIS变形。讲解看这里。
先按重量递增排一下序。
然后用记忆化搜索或者递推都可以做。
记忆化搜索需要注意dp数组初值与非初值的区别。
还要注意排序后可能存在两个重量相同的排在一起,而题目要求的是重量严格递增。
两种方法用的时间差不多。
#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;const int MAX_N = 1000 + 50;struct Ele{ int w,s; int i;};Ele ele[MAX_N];int dp[MAX_N];int lis;int cmp(const void *a, const void *b){ Ele *_a = (Ele*)a; Ele *_b = (Ele*)b; return (_a -> w) - (_b -> w);}void outputLIS(int index){ if(lis == 0) return; bool flag = false; if(dp[index] == lis) { flag = true; lis--; } outputLIS(index - 1); if(flag) cout << ele[index].i << endl;}int main(){ char str[1024]; int num = 0; lis = 0; while(gets(str)) { if(!str[0]) break; sscanf(str,"%d%d",&ele[num].w,&ele[num].s); ele[num].i = num + 1; num++; } qsort(ele,num,sizeof(ele[0]),cmp); for(int i = 0;i < num;i++) { dp[i] = 1; for(int j = 0;j < i;j++) { if(ele[i].s < ele[j].s && ele[i].w != ele[j].w && dp[i] < dp[j] + 1) { dp[i] = dp[j] + 1; lis = max(lis,dp[i]); } } } cout << lis << endl; outputLIS(num - 1); return 0;}
#include <iostream>#include <stdio.h>#include <algorithm>#include <cstring>using namespace std;const int MAX_N = 1000 + 50;struct Ele{ int w,s; int i;};Ele ele[MAX_N];int dp[MAX_N];int lis,num;int cmp(const void *a, const void *b){ Ele *_a = (Ele*)a; Ele *_b = (Ele*)b; return (_a -> w) - (_b -> w);}int DP(int i){ if(dp[i] != 0) return dp[i]; dp[i] = 1; for(int j = i + 1;j < num;j++) { if(ele[i].s > ele[j].s && ele[i].w != ele[j].w) dp[i] = max(dp[i],DP(j) + 1); } return dp[i];}void outputLIS(int index){ if(lis == 0) return; if(dp[index] == lis) { cout << ele[index].i << endl; lis--; } outputLIS(index + 1);}int main(){ memset(dp,0,sizeof(dp)); char str[1024]; num = 0; lis = 0; while(gets(str)) { if(!str[0]) break; sscanf(str,"%d%d",&ele[num].w,&ele[num].s); ele[num].i = num + 1; num++; } qsort(ele,num,sizeof(ele[0]),cmp); for(int i = 0;i < num;i++) lis = max(lis,DP(i)); cout << lis << endl; outputLIS(0); return 0;}
0 0
- UVa 10131 Is Bigger Smarter?
- UVa 10131 Is Bigger Smarter?
- UVA 10131 - Is Bigger Smarter
- uva 10131 Is Bigger Smarter?
- uva:10131 - Is Bigger Smarter?
- uva 10131 Is Bigger Smarter?
- UVA 10131 Is Bigger Smarter?
- UVA 10131 Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter?
- Uva - 10131 - Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter
- UVa 10131: Is Bigger Smarter?
- UVa:10131 Is Bigger Smarter?
- UVA - 10131 Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter?
- UVa 10131 - Is Bigger Smarter?
- 2013级C++第3周【项目1-掌握有对象的程序结构】
- 设计模式之——抽象工厂模式
- VS2010WriteString函数不能输出汉字
- 图像仿射变换
- Linux 学习小记之vi的使用方法初探(不积跬步,无以至千里)
- UVa 10131 - Is Bigger Smarter?
- WEB日志格式
- 算法作业
- 项目管理——统一开发工具GVIM
- 花前挥手别伊人,月下纵马扬轻尘,红尘游历,荡剑江湖。四方辗转,看千山飞鸟逐;万里飘蓬,叹海角天涯路。夜风萧瑟雨凄楚,相思情入梦,孤影独对窗前烛,离别意难书。何时平尽心中愿,从此相守不离疏,岁岁年年情深
- ubuntu 13.10挂载windows共享目录
- SNMP常用OID查询
- SQL收缩日志
- oppo find 7特色功能