ABC155E - Payment
简述题意,给你一个大数,你可以选择10的次幂进行加减运算,问如何用最少的次数从0到达这个大数
考虑从这个大数到0,从最低位开始,每次都将这个位置取完,2种策略,贪心的话不好处理进位的情况,可以想到是DP
设dp[i][0]为取到第i位,将第i位直接拿完的最小次数,dp[i][1]为取到第i位,进位后拿完的最小次数,可以得到状态转移,num表示第i位的数字
dp[i][0] = min(dp[i-1][0], dp[i-1][1]+1) + num,dp[i-1][1]-1表示进了一位,所以第i位就要+1
dp[i][1] = 10 - num + min(dp[i-1][0], dp[i-1][1]-1) 同理,dp[i-1][1]进了一位,num相当于(num+1), 10-(num+1) = 10 - num - 1
注意初始化状态,最终取答案的时候要在最高位的下一位统计,因为最高位可能也进位了,相当于放了一个虚0
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxm = 1e6+;
int dp[maxm][]; void run_case() {
string str;
cin >> str;
dp[str.size()-][] = str[str.size()-]-'';
dp[str.size()-][] = - str[str.size()-] +'';
for(int i = str.size()-; i >= ; --i) {
int num = str[i]-'';
dp[i][] = min(dp[i+][]+, dp[i+][]) + num;
dp[i][] = - num + min(dp[i+][]-, dp[i+][]);
}
cout << min(dp[][]+, dp[][]); } int main() {
ios::sync_with_stdio(false), cin.tie();
//cout.setf(ios_base::showpoint);cout.precision(8);
run_case();
cout.flush();
return ;
}
我们也可以从最高位开始,dp函数的意义相同,只是状态转移的部分不一样
dp[i][0] = min(dp[i+1][0], dp[i+1][1]) + num
dp[i][1] = 10 - num + min(dp[i+1][0]+1, dp[i+1][1]-1) 第i位进位了,所以dp[i+1][0]要+1, 进了位dp[i+1][1]要-1
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxm = 1e6+;
int dp[maxm][]; void run_case() {
string str;
cin >> str;
dp[][] = str[] - '';
dp[][] = - str[] + '' + ;
for(int i = ; i < str.size(); ++i) {
int num = str[i] - '';
dp[i][] = min(dp[i-][], dp[i-][]) + num;
dp[i][] = - num + min(dp[i-][]+, dp[i-][]-);
}
cout << min(dp[str.size()-][], dp[str.size()-][]);
} int main() {
ios::sync_with_stdio(false), cin.tie();
//cout.setf(ios_base::showpoint);cout.precision(8);
run_case();
cout.flush();
return ;
}
注意代码中的i+1与i-1是相反的,因为字符串读入下标是反的
该题的母题应该是cf gym的一套题
ArabellaCPC 2019 J. Thanos Power
ABC155E - Payment的更多相关文章
- Electronic Payment App analysis
Electronic Payment App is getting more and more popular now. People don't have to bring credit cards ...
- [转]NopCommerce How to code my own payment method
本文转自:http://docs.nopcommerce.com/display/nc/How+to+code+my+own+payment+method Payment methods are im ...
- ecshop /includes/modules/payment/alipay.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/ ...
- Payment Terms 收付款条件和分期付款设置
SAP Payment Terms 中文翻译为收付款条件,他的用途是应收和应付的财务凭证中账期的管理,顾名思义即手动录入和自动生成的财务文档多少天内冲销处理则为正常,否则为超期应收应付文档,它包含的内 ...
- WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞
漏洞名称: WP e-Commerce WordPress Payment Gateways Caller插件本地文件包含漏洞 CNNVD编号: CNNVD-201310-642 发布时间: 2013 ...
- LA 6448 Credit Card Payment
[题目] 你的信用卡目前欠M元,每月的汇率是R,每月的利息要四舍五入为小数点后两位,你每月还B元,问多少月能还清. 输入 先是T代表测试数据组数 接下来T行,每行有三个实数,R,M,B每个实数小数 ...
- Down Payment 和 Deposit的差异
If you’re like most homeowners, purchasing a home represents the single biggest financial transactio ...
- openzeppelin-solidity/contracts的代码学习——payment
payment - A collection of smart contracts that can be used to manage payments through escrow arrange ...
- Payment相关逻辑
payment相关逻辑 付款有手动付款和计划程序自动付款两种,照例先列出涉及到的概念 付款方式 - PaymentTypes - 现金,支票,信用卡,等等 记账类型 - Ledger_AccTrans ...
随机推荐
- Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException
实体类缺少无参构造方法,序列化对象需要无参构造方法 @NoArgsConstructor
- 2016 Google code jam 大赛
二,RoundC import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundE ...
- python 处理html文本的中文字符gbk转utf-8
#中文字符gbk转utf-8 def gbk2utf8(self,raw): rs=raw.encode('raw_unicode_escape') #转为机器识别字符串 s=repr(rs) ss= ...
- C语言:假定输入的字符串只包含字母和*号,fun函数:除了尾部的*号以外,将字符的其他*号进行全部删除,形参p已经指向字符串中最后一个字母。-利用折半查找整数m在有序数组中的位置,若找到,返回下标值,否则返回-1。
//假定输入的字符串只包含字母和*号,fun函数:除了尾部的*号以外,将字符的其他*号进行全部删除,形参p已经指向字符串中最后一个字母. #include <stdio.h> void f ...
- About Computer Graphics 2.0
Notes of Computer Graphics 2.0: towards end-user-generated contents CG 1.0 Modeling: construct 3D mo ...
- 将jar包安装到本地Maven仓库
1.安装jar包到本地仓库 mvn install:install-file -Dfile=F:\jiefu\lib\alipay-sdk-java20170324180803.jar -Dgroup ...
- java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time.....
SpringBoot 2.1.4启动时报错 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecogniz ...
- 201771010135杨蓉庆 《面对对象程序设计(java)》第九周学习总结
第7章 异常.日志.断言和调试 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一.理论知识 1.异常:在程 ...
- pair node stack vector string priority_queue
multiset 元素重复 自动排序 map #include <bits/stdc++.h> using namespace std; map<int,int> s;//自当 ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:全模型
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...