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", n - i);
break;
}
}
return 0;
}
有些路你和某人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚步。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步