贪心算法小白の人品测试

原创 2016年06月01日 13:01:21

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=3555&cid=1755

小白の人品测试

Time Limit: 1000MS Memory limit: 65536K

题目描述

现在有n个人,编号从1到n ,每个人有一个 人品值
这是一个赤裸裸的金钱关系的世界
如果小白想要小黑直接帮他一个忙,他需要支付的代价为 abs(小白的人品 - 小黑的人品)。
小白也可以找小金,然后小金去拜托小黑帮他,这样他就要支付双份的代价,具体的,代价为
abs(小白的人品 - 小金的人品)+abs(小金的人品 - 小黑的人品)
小白还可以找多个人帮忙,不妨记为小A,小B,小C...小Z这样他要支付多份代价
abs(小白的人品 - 小A的人品)+abs(小A的人品 - 小B的人品)+...+abs(小Z的人品 - 小黑的人品)
 
现在问题来了,小白最少要支付多少代价才能获得小黑的帮助

输入

多组输入直到文件结束(EOF)
一个数n代表现在有n个人(2<=n<=1000)
接下来n个整数Ai代表第i个人的人品值(0<= Ai <=100)
为了方便起见,我们假设小白的标号为1,小黑的编号为n

输出

小白要支付的代价

示例输入

5 
1 1 1 1 4
3
1 2 3

示例输出

3
2

提示

abs(x) 是绝对值

来源

“师创杯”山东理工大学第八届ACM程序设计竞赛

示例程序

 
这道题那叫一个恨啊,这是校赛的第二题,其实就是简单的贪心,但是我先想到的却是DFS,结果没注意复杂度TLE更是一脸懵逼QAQ,之后一大半时间没跳出深搜的坑,直到最后的十分钟才猛然惊醒,测试都没测试交上去就A了,唉~还是太年轻啊,这题别人都很快就做出来了,RANK1更是2分钟就解出来了,怎么说呢,这次校赛出的题确实不咋地啊,基本没啥太大的难度梯度,就Rank1做了8道,其余基本就是7道了,而且没有涉及集训的数据结构和算法但是我老是往那想,最后解了6题Rank40得了个二等奖。。。权当一次教训吧,不能再止步不前了,现在到暑假这段期间接着数据结构,暑假集训进军C++

先是DFS代码:

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5. using namespace std;  
  6. bool vis[1000+5];  
  7. int n, a[1000+5], m;  
  8. int abs(int x, int y)  
  9. {  
  10.     return x>y?(x-y):(y-x);  
  11. }  
  12. void dfs(int cur, int ans)  
  13. {  
  14.     if(cur==n&&ans<m)  
  15.     {  
  16.         m=ans;  
  17.         return ;  
  18.     }  
  19.     for(int i=1;i<=n;i++)  
  20.     {  
  21.         if(!vis[i])  
  22.         {  
  23.             vis[i]=1;  
  24.             dfs(i,ans+abs(a[i],a[cur]));  
  25.             vis[i]=0;  
  26.         }  
  27.     }  
  28.     return ;  
  29. }  
  30. int main()  
  31. {  
  32.     while(~scanf("%d", &n))  
  33.     {  
  34.         m=99999999;  
  35.         for(int i=1;i<=n;i++)  
  36.             scanf("%d", &a[i]);  
  37.         memset(vis,0,sizeof(vis));  
  38.         vis[1]=1;  
  39.         dfs(1,0);  
  40.         printf("%d\n", m);  
  41.     }  
  42.     return 0;  
交上发现14级的几位学长学姐也是TLE,估计也是陷进了DFS了。。。

然后是贪心,想到贪心估计这题也就出来了,代码很简单:

  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <algorithm>  
  5. using namespace std;  
  6. int n, a[1000+5];  
  7. int abs(int x, int y)  
  8. {  
  9.     return x>y?(x-y):(y-x);  
  10. }  
  11. int main()  
  12. {  
  13.     while(~scanf("%d", &n))  
  14.     {  
  15.         for(int i=1;i<=n;i++)  
  16.             scanf("%d", &a[i]);  
  17.         int cur=1, ans=abs(a[n],a[1]);  
  18.         for(int i=2;i<=n;i++)  
  19.         {  
  20.             if(abs(a[cur],a[i])+abs(a[i],a[n])<ans)  
  21.             {  
  22.                 ans=abs(a[cur],a[i])+abs(a[i],a[n]);  
  23.                 cur=i;  
  24.             }  
  25.         }  
  26.         printf("%d\n", ans);  
  27.     }  
  28.     return 0;  
  29. }  

版权声明:本文为博主原创文章,未经博主允许不得转载。

小白の人品测试

小白の人品测试  Time Limit: 1000MS Memory limit: 65536K  题目描述现在有n个人,编号从1到n ,每个人有一个 人品值这是一个赤裸裸的金钱关系的世界如果小白...
  • qq_34952846
  • qq_34952846
  • 2016年05月31日 17:39
  • 130

山东理工大学第八届ACM校赛——小白の人品测试

小白的人品测试 这个题目 当时看到的时候以为特别的高深 还研究了好一会 以为是什么迷一样的算法 直到我发现 不管怎么样都不会比最后一个直接减去第一个更小......后来我想通了 就像买东西一样 中间...
  • MeiK_SDUT
  • MeiK_SDUT
  • 2016年06月07日 18:37
  • 928

sdut 3555 sdut第八届校赛--小白の人品测试

题目链接:点击打开链接 题目描述 现在有n个人,编号从1到n ,每个人有一个 人品值 这是一个赤裸裸的金钱关系的世界 如果小白想要小黑直接帮他一个忙,他需要支付的代价为 abs(小...
  • txgANG
  • txgANG
  • 2016年06月01日 15:56
  • 136

人品计算器 JFrame 窗体软件版 JPanel JTextField JTextArea JButtton JLabel setContentPane Swing包(用户界面工具包)

import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.eve...
  • swift2010
  • swift2010
  • 2018年01月01日 00:38
  • 44

TYZ 8/22 人品问题

人品问题 题目描述 网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去,系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后,yzx得出了一个更为科学的人品计...
  • AzureMayfly
  • AzureMayfly
  • 2016年08月22日 16:52
  • 378

树形dp(人品问题NOIP17提高模拟训练3)

网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去,系统将自动输出你的人品指数。把儿不相信自己的人品为0。经过了许多研究后,把儿得出了一个更为科学的人品计算方法。这种方法的理论依据是...
  • u013672056
  • u013672056
  • 2017年07月27日 20:37
  • 106

人品测试

// 2014软件技术2班 // All rights reserved. // 作 者:B36 // 完成日期:2014年 1...
  • futurismme
  • futurismme
  • 2014年11月20日 00:15
  • 152

最近人品有问题,发现的三件怪事.

怪事情 之一 : 我把一个成员变量的assign操作写成这样了。void CReadBuffer::set_stream(IReadStream* pStream, int len){    .......
  • Nhsoft
  • Nhsoft
  • 2005年07月31日 22:32
  • 1448

Android 人品计算器

public class MainActivity extends AppCompatActivity { private EditText et_name; private Rad...
  • QPC908694753
  • QPC908694753
  • 2017年04月23日 14:16
  • 250

湿货|小白学习大数据测试之Hive和Hbase

作为初学者经常会对Hive和Hbase产生疑问,不知道两者是干啥的,有啥区别,总觉得都是存储数据的。其实他们还真是有本质区别的,请听我慢慢道来~ Hbase是nosql数据库,以key-valu...
  • xqtesting
  • xqtesting
  • 2018年01月25日 08:40
  • 108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:贪心算法小白の人品测试
举报原因:
原因补充:

(最多只允许输入30个字)