zoukankan      html  css  js  c++  java
  • CF1214A

    CF1214A

    题意:

    有n个卢布,要换成美元和欧元,使手上剩余的卢布最少。一美元价值d卢布,一欧元价值e卢布。

    解法:

    可以看成只有两个没有代价的可以无限取的物品的完全背包。

    CODE:

    #include<bits/stdc++.h>
     
    #define LL long long
    #define N 100000010
     
    using namespace std; 
     
    int n,d,e,cnt,dp[20]; 
    bool vis[N]; 
     
    const int dollar[50] =  {0, 1, 2, 5, 10, 20, 50, 100}; 
    const int eu[50] =  {0, 5, 10, 20, 50, 100, 200}; 
     
    inline void init() {
        for(int i = 1; i <= 7; i++) 
            dp[++cnt] = d * dollar[i]; 
    	for(int i = 1; i <= 6; i++) 
            dp[++cnt] = e * eu[i]; 
    	vis[0] = 1;
    }
     
    int main() {
    	scanf("%d%d%d",&n,&d,&e); 
        init();
    	for(int i = 1; i <= cnt; i++) {
            for(int j = dp[i]; j <= n; j++) {
                if(vis[j - dp[i]]) vis[j] = 1;
            }
        }
    	for(int i = n; i >= 0; i--) {
    		if(vis[i] == 1) {
    			printf("%d
    ", n - i); 
    			break; 
    		}
    	}
    	return 0; 
    }
    
  • 相关阅读:
    Arrays工具类、二维数组
    Idea软件的使用
    循环语句
    方法
    objective-C 2.0
    Unix系统常用命令
    文献管理工具Zotero
    如何降低论文重复率
    SQL易忽视的细节
    数据库系统原理学习资源
  • 原文地址:https://www.cnblogs.com/Repulser/p/11469886.html
Copyright © 2011-2022 走看看