hust1254背包

用现有的硬币换钱,使得自己亏最少,而且还要换的硬币数最少,每种硬币只能选1或不选

#include<iostream> #include<cstdio> #include<cmath> using namespace std; #define m 100000000 int dp[30000]; //dp[i]表示用钱数为i最少可以用dp[i]个硬币来换 int a[105]; int min(int a,int b) { return a<b?a:b; } int main() { // freopen("in","r",stdin); int t; int p; scanf("%d",&t); while(t--) { int n; scanf("%d",&p); scanf("%d",&n); int i,j; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<=20000;i++) dp[i]=m; dp[0]=0; for(i=0;i<n;i++) { for(j=20000;j>=a[i];j--) dp[j]=min(dp[j],dp[j-a[i]]+1); } for(i=p;i<=20000;i++) if(dp[i]<m) { printf("%d %d/n",i,dp[i]); break; } } return 0; }  

你可能感兴趣的:(ini)