浙大PAT 1068题 1068. Find More Coins

2024-02-26 22:08
文章标签 浙大 find pat coins 1068

本文主要是介绍浙大PAT 1068题 1068. Find More Coins,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态规划,用dp[i][j]记录当使用前i个硬币时是否可以达到价值j,可以则为1,反之为0;
用pre[i][j]记录当前第i个硬币是否在状态dp[i][j]中使用,是则为1,反之为0;

最后在寻找解时,如果pre[i][j]为1,则记录到ans(便于一起输出),反之则不断i--,则到pre[i][j]为1。

先对数据进行从大到小排序,保证最后的输出是smaller的,用下面的例子能更好的说明算法的思想。

input info
4 9
1 3 4 5
dp[i][j] info
0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 1
0 0 1 1 1 0 1 1 1
1 0 1 1 1 1 1 1 1
pre[i][j] info
0 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 1
0 0 1 0 0 0 1 1 0
1 0 0 1 1 1 0 1 1
result info
1 3 5



#include<stdio.h>
#include<stdlib.h>
int cmp(const void* ta,const void* tb){int* a=(int*)ta;int* b=(int*)tb;return *a<*b;
}
int dp[10001][101],pre[10001][101];
int arr[10001],ans[10001];
int main(){int i,j,n,m;scanf("%d %d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&arr[i]);}qsort(arr+1,n,sizeof(int),cmp);for(i=0;i<=n;i++){for(j=0;j<=m;j++){dp[i][j]=0;pre[i][j]=0;}}for(i=0;i<=n;i++){dp[i][0]=1;}for(i=1;i<=n;i++){for(j=arr[i];j<=m;j++){if(dp[i-1][j-arr[i]]){dp[i][j]=1;pre[i][j]=1;}else{dp[i][j]=dp[i-1][j];}}}if(!dp[n][m]){printf("No Solution\n");}else{int cnt=0;while(n>0){if(pre[n][m]){ans[cnt]=arr[n];m=m-arr[n];n=n-1;cnt++;}else{n--;}}for(i=0;i<cnt-1;i++){printf("%d ",ans[i]);}printf("%d\n",ans[cnt-1]);}return 0;
}


这篇关于浙大PAT 1068题 1068. Find More Coins的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750314

相关文章

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

MongoDB学习—(6)MongoDB的find查询比较符

首先,先通过以下函数向BookList集合中插入10000条数据 function insertN(obj,n){var i=0;while(i<n){obj.insert({id:i,name:"bookNumber"+i,publishTime:i+2000})i++;}}var BookList=db.getCollection("BookList")调用函数,这样,BookList

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

【NodeJS】Error: Cannot find module 'ms'

转载自:http://blog.csdn.net/echo_ae/article/details/75097004 问题: Error: Cannot find module 'ms'at Function.Module._resolveFilename (module.js:469:15)at Function.Module._load (module.js:417:25)at Module

leetCode#448. Find All Numbers Disappeared in an Array

Description Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this

访问controller404:The origin server did not find a current representation for the target resource

ider build->rebuild project。Rebuild:对选定的目标(Project),进行强制性编译,不管目标是否是被修改过。由于 Rebuild 的目标只有 Project,所以 Rebuild 每次花的时间会比较长。 参考:资料

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

浙大数据结构——03-树1 树的同构

这道题我依然采用STL库的map,从而大幅减少了代码量 简单说一下思路,两棵树是否同构,只需比较俩树字母相同的结点是否同构,即是否左==左,右==右或者左==右,右==左。 1、条件准备 atree和btree是存两个数结点字母,第几个就存输入的第几个结点的字母。 map通过结点的字母作为键,从而找到两个子节点的信息 都要用char类型 #include <iostream>#inc

浙大数据结构:堆栈和队列的定义与操作

堆栈: 顺序存储: #include<stdio.h>#include<stdlib.h>typedef int ElementType ;typedef int position ;#define MAXSIZE 100#define ERROR -1struct SNode {ElementType * Data ;position top;int Maxsize;};