文章

166

粉丝

68

获赞

829

访问

51.3k

头像
凑零钱 题解:一维dp缩减空间,并解释如何实现值匹配问题
P1820 华南理工大学机试题
发布于2025年3月2日 12:42
阅读数 173

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	while(cin>>n){
	    vector<int>dp(n+1,INT_MAX);
	    dp[0]=0;
	    int m;cin>>m;
	    for(int i=0;i<m;i++){
	        int x;cin>>x;
	        for(int j=x;j<=n;j++){
	            if(dp[j-x]!=INT_MAX){
	                dp[j]=min(dp[j],dp[j-x]+1);
	            }
	        }
	    }
	    if(dp[n]==INT_MAX)cout<<"Impossible"<<endl;
	    else cout<<dp[n]<<endl;
	}
}

这里是经典的一维完全背包问题的解法,核心是判断条件,如果是单纯的匹配值问题,这里直接用bool类型数组即可,因为需要数量,所以我们在可以匹配的时候,计算数量的最小值即可。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发