一道ACM的题,我感觉我的想法没错,但就是过不了,求指点

Have_Afk 2014-03-08 12:03:44
首先贴上题目的地址
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1025

我讲讲我的思路,我是这样做的,把所有的木棍按长度L进行从小到大排序,如果长度相同,就按重量进行从小到大排序。然后从最小的开始当做机器的标准,把这个标准能处理的木棍都标记为1(VISITED数组),然后再循环下一个没有处理的最小的,不知道我的想法对不对,求指点。
下面是代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct Stick{
int length;
int weight;
};
bool cmp(Stick a,Stick b){
if(a.length==b.length){
return a.weight<b.weight;
}
return a.length<b.length;
}
int main(){
Stick stick[5005];
int T;
int i,j;
int visited[5005];
scanf("%d",&T);
while(T--){
int n;
memset(visited,0,sizeof(visited));
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%d",&stick[i].length,&stick[i].weight);
}
int count=0;
sort(stick,stick+n,cmp);
for(i=0;i<n;i++){
if(!visited[i]){
visited[i]=1;
count++;
int l=stick[i].length;
int w=stick[i].weight;
for(j=i+1;j<n;j++){
if(!visited[j] && stick[j].length>=l && stick[j].weight>=w){
visited[j]=1;
}
}
}
}
printf("%d\n",count);

}
return 0;
}
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2014-03-08
  • 打赏
  • 举报
回复
Dilworth定理? 找最长反链。
Have_Afk 2014-03-08
  • 打赏
  • 举报
回复
引用 5 楼 FancyMouse 的回复:
[quote=引用 4 楼 hch201201 的回复:] [quote=引用 2 楼 FancyMouse 的回复:] lz的感觉还有待磨练。没有到一定境界的时候一个好习惯是,除非自己能证明,否则默认自己的想法是错的。
嗯嗯,受用了,问下,这道程序能不能找一个例子证明它的错的,我就纠结这个,有点想不通。[/quote] len 1 2 3 4 5 weight 1 5 4 3 2 你的程序把(1,1)的visited弄成true的时候会把所有接下来的都给弄成true,但是1下显然是搞不定的。[/quote] 太谢谢了,原来是我把题目理解错了
FancyMouse 2014-03-08
  • 打赏
  • 举报
回复
引用 4 楼 hch201201 的回复:
[quote=引用 2 楼 FancyMouse 的回复:] lz的感觉还有待磨练。没有到一定境界的时候一个好习惯是,除非自己能证明,否则默认自己的想法是错的。
嗯嗯,受用了,问下,这道程序能不能找一个例子证明它的错的,我就纠结这个,有点想不通。[/quote] len 1 2 3 4 5 weight 1 5 4 3 2 你的程序把(1,1)的visited弄成true的时候会把所有接下来的都给弄成true,但是1下显然是搞不定的。
Have_Afk 2014-03-08
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
lz的感觉还有待磨练。没有到一定境界的时候一个好习惯是,除非自己能证明,否则默认自己的想法是错的。
嗯嗯,受用了,问下,这道程序能不能找一个例子证明它的错的,我就纠结这个,有点想不通。
Have_Afk 2014-03-08
  • 打赏
  • 举报
回复
引用 1 楼 baihacker 的回复:
Dilworth定理? 找最长反链。
谢谢你的回答,不过我想知道的是我的思路的问题出在哪里,能不能找一个例子让这段程序得出的答案是错的
FancyMouse 2014-03-08
  • 打赏
  • 举报
回复
lz的感觉还有待磨练。没有到一定境界的时候一个好习惯是,除非自己能证明,否则默认自己的想法是错的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧