PAT 1037 Find Coins (25)(dp子序列)

原创 2016年08月30日 12:59:13

题目

1048. Find Coins (25)

时间限制
50 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special requirement of the payment: for each bill, she could only use exactly two coins to pay the exact amount. Since she has as many as 105 coins with her, she definitely needs your help. You are supposed to tell her, for any given amount of money, whether or not she can find two coins to pay for it.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive numbers: N (<=105, the total number of coins) and M(<=103, the amount of money Eva has to pay). The second line contains N face values of the coins, which are all positive numbers no more than 500. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the two face values V1 and V2 (separated by a space) such that V1 + V2 = M and V1 <= V2. If such a solution is not unique, output the one with the smallest V1. If there is no solution, output "No Solution" instead.

Sample Input 1:
8 15
1 2 8 7 2 4 11 15
Sample Output 1:
4 11
Sample Input 2:
7 14
1 8 7 2 4 11 15
Sample Output 2:
No Solution

解题思路

  • 1.先排序,然后从计算a[i]+a[j],i,j分别以数列的首尾为初始值,然后比较他们和与m的大小,然后再相应的i++或者j--

代码

#include<cstdio>
#include<algorithm>
using namespace std;
int num[100000+5];
int main(int argc, char *argv[])
{
    int n,m;
    scanf("%d %d",&n,&m);
    for (int i = 0; i < n; ++i) {
        scanf("%d",&num[i]);
    }
    sort(num,num+n);
    for (int i = 0,j = n - 1; i < j; ) {
        if (num[i] + num[j] > m) {
            j--;
        }else if (num[i] + num[j] < m) {
            i++;
        }else {
            printf("%d %d\n",num[i],num[j]);
            return 0;
        }
    }
    printf("No Solution\n");
    return 0;
}

下面这段段错误错在哪?始终没找到==

#include<cstdio>
#include<algorithm>
using namespace std;
int num[100000+5];
int main(int argc, char *argv[])
{
    int n,m;
    scanf("%d %d",&n,&m);
    for (int i = 0; i < n; ++i) {
        scanf("%d",&num[i]);
    }
    if (n<=1) {
        printf("No Solution\n");
    }else {
        sort(num,num+n);
        bool isFind = false;
        for (int i = 0; i < n - 1,num[i]<m; i++) {

            for (int j = i+1; j < n,num[j]<m; j++) {
                if (num[i]+num[j]==m) {
                    printf("%d %d\n",num[i],num[j]);
                    isFind = true;
                    break;
                }
            }
            if (isFind) {
                break;
            }
        }
        if (!isFind) {
            printf("No Solution\n");
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

PAT 乙级 1037. 在霍格沃茨找零钱(20)Java版

如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定...
  • liuchuo
  • liuchuo
  • 2017年02月23日 17:04
  • 161

最长公共子序列(LCS问题)的DP解法

呃。。大一做过,毕竟是ACM入门DP题,但是大三的我已然忘了具体咋做了,只记得是DP,面试常会问这个问题,所以有必要搞明白。 题目描述略。 解题思想就是DP,DP无外乎需要知道两个东西,一是状态是什么...
  • u013303743
  • u013303743
  • 2016年04月23日 10:40
  • 707

LCS 最长公共子序列(DP经典问题)

最长公共子序列问题以及背包问题都是DP(动态规划)算法的经典题目,值得深度挖掘以致了解DP算法思想。问题如下: 最长公共子序列 时间限制:3000 ms  |  内存限制:6553...
  • u014492609
  • u014492609
  • 2014年08月08日 15:48
  • 1257

【openjudge 1759】最长上升子序列(dp)

松叶正秋琴韵响,菱花初晓镜光寒
  • reverie_mjp
  • reverie_mjp
  • 2016年11月01日 21:54
  • 258

最长公共子序列与最长公共子串(DP)

1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogsbelong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序...
  • u012102306
  • u012102306
  • 2016年11月16日 11:14
  • 3836

1040. 有几个PAT(25)

题目链接:http://www.patest.cn/contests/pat-b-practise/1040 1040. 有几个PAT(25) 时间限制 120 ...
  • ice_camel
  • ice_camel
  • 2015年03月14日 21:14
  • 2592

1035. 插入与归并(25)-浙大PAT乙级真题

1035. 插入与归并(25) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭...
  • liuchuo
  • liuchuo
  • 2016年07月22日 14:43
  • 693

PAT 1003. Emergency (25) (求两点间最短路的条数)

1003. Emergency (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...
  • IAccepted
  • IAccepted
  • 2014年03月18日 12:19
  • 7775

5-6 PAT排名汇总 (25分)

5-6 PAT排名汇总   (25分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计...
  • qq_36525906
  • qq_36525906
  • 2017年02月23日 14:48
  • 840

(UESTC - 1006)最长上升子序列(DP,输出子序列的元素)

Time limit1000 ms Memory limit65535 kB 一个数的序列B=(b1,b2,⋯,bS)B=(b1,b2,⋯,bS),当b1...
  • feng_zhiyu
  • feng_zhiyu
  • 2017年07月31日 10:53
  • 116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PAT 1037 Find Coins (25)(dp子序列)
举报原因:
原因补充:

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