poj1065 wooden sticks
2015-05-31 17:17
267 查看
这是一道贪心的题,具体思路是先对有序对进行排序,规则是长度小的优先,若长度l相等,则以宽度小的优先,选择的时候,从小到大,先找最小的,然后依次排序,标记(弄个解向量,然后找第二小的。。。。不过我最开始还是参考了别人的代码,虽然思路是我自己想的。。。。
从别人的代码我学到的东西
1.qsort好久没用过了。。。。不过他的cmp函数功能真强大,可以按照你自己的定义的规则进行排序。还有就是对结构体的元素进行操作,注意声明他是结构体里的变量。
2.memset函数,第三个参数注意写清几个元素。
3.还是细节决定成败啊。。。
一次a的有进步
从别人的代码我学到的东西
1.qsort好久没用过了。。。。不过他的cmp函数功能真强大,可以按照你自己的定义的规则进行排序。还有就是对结构体的元素进行操作,注意声明他是结构体里的变量。
2.memset函数,第三个参数注意写清几个元素。
3.还是细节决定成败啊。。。
一次a的有进步
#include<cstdio> #include<iostream> #include<algorithm> #include<mem.h> using namespace std; const int maxn=5000+1000; typedef struct Node { int w; int l; }node; node woods[maxn]; int cmp(const void*a,const void*b) { if((*(node*)a).w<(*(node*)b).w) return -1; else if((*(node*)a).w>(*(node*)b).w) return 1; else if((*(node*)a).w==(*(node*)b).w) { if((*(node*)a).l<=(*(node*)b).l) return -1; else return 1; } } int select[maxn];//解向量 int main() { int t; // freopen("1.txt","r",stdin); scanf("%d",&t); while(t--) { int p; scanf("%d",&p); for(int i=0;i<p;i++) { scanf("%d%d",&woods[i].w,&woods[i].l); } qsort(woods,p,sizeof(woods[0]),cmp);//从小到大排序 //for(int i=0;i<p;i++) //select[i]=0; memset(select,0,sizeof(int)*p); int times=0; while(1) { int i; for( i=0;i<p;i++) { if(select[i]==0) break; } if(i==p) break; times++; for(int j=i;j<p;j++) { if(!select[j]) { if(woods[i].w<=woods[j].w&&woods[i].l<=woods[j].l) { i=j; select[j]=1; } } } } printf("%d\n",times); } return 0; }
相关文章推荐
- sgu243:Broken Chessboard(搜索+优化)
- hiho一下 第四十八周
- uml精粹——8.部署图 & 9.用例
- 如何不通过maven或者ant将项目打包成可执行的Jar包
- Freemarker-数字默认格式化问题
- 连载《一个程序猿的生命周期》-19.工作7年,对做技术的一点感悟和理解
- 数组转变成键值一维数组
- 通讯录(C语言、文件保存)
- poj 1700 Crossing River 【贪心】
- eclipse自动代码提示
- vim自动补全插件YouCompleteMe的安装及配置
- 周末闲着无聊分享一个自己写的带呼吸效果的android水波纹自定义view
- 数据库逆向框架代码生成工具:MyBatis Generator的使用
- HDU 2022 海选女主角
- Spring2.5学习2.4_Spring如何装配各种集合类的属性
- 服务端数据库的操作如何不阻塞
- ExtJs4.2示例中infinite-scroll出现PageMap asked for range which it does not have错误及解决
- Python学习之四sys.argv
- Lucene基础(四)-- 结合数据库使用
- cannot resolve getAttribute(java.lang.String)问题的解决