Invoker(小DP)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=6739
尽量让他们连起来。
思路:
直接dp,其中一个状态是以什么结尾。
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>//freopen("C:\\Users\\13606\\Desktop\\草稿.txt","r",stdin);
#include <bitset>
//#include <map>
//#include<unordered_map>
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr
#include <string>
#include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
//******************
int abss(int a);
int lowbit(int n);
int Del_bit_1(int n);
int maxx(int a,int b);
int minn(int a,int b);
double fabss(double a);
void swapp(int &a,int &b);
clock_t __STRAT,__END;
double __TOTALTIME;
void _MS(){__STRAT=clock();}
void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
//***********************
#define rint register int
#define fo(a,b,c) for(rint a=b;a<=c;++a)
#define fr(a,b,c) for(rint a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
typedef long long ll;
const double E=2.718281828;
const double PI=acos(-1.0);
//const ll INF=(1LL<<60);
const int inf=(<<);
const double ESP=1e-;
const int mod=(int)1e9+;
const int N=(int)1e5+; int dp[N][];
char s[N];
int tot;
int ID[];
int map[];
int id(int x)
{
return ID[x];
}
struct node
{
int a,b,c;
}p[];
void PR(int _[],int n)
{
for(int i=;i<=n;++i)
pr("%d ",_[i]);
pr("\n");
}
int main()
{
tot=;
for(int i=;i<=;++i)
{
int temp=i;
bool f=;
while(temp>)
{
if(temp%!=&&temp%!=&&temp%!=)
f=;
temp/=;
}
if(f)map[++tot]=i;
}
for(int i=;i<=;++i)
ID[map[i]]=i;
p[]={,,};
p[]={,,};
p[]={,,};
p[]={,,};
p[]={,,};
p[]={,,};
int v[];
v['Y']=;
v['V']=;
v['G']=;
v['C']=;
v['X']=;
v['Z']=;
v['T']=;
v['F']=;
v['D']=;
v['B']=;
while(~sc("%s",s+))
{
int l=strlen(s+);
for(int i=;i<=l;++i)
for(int j=;j<=;++j)
dp[i][j]=inf;
for(int i=;i<=;++i)
{
int temp=v[s[]];
int cnt=;
int mp[];
while(temp>)
{
mp[cnt]=temp%;
temp/=;
cnt--;
}
int x=mp[p[i].b]*+mp[p[i].c];
dp[][id(mp[p[i].a]*+mp[p[i].b]*+mp[p[i].c])]=min(,dp[][id(mp[p[i].a]*+mp[p[i].b]*+mp[p[i].c])]);
dp[][id(x)]=min(dp[][id(x)],);
x=mp[p[i].c];
dp[][id(x)]=min(dp[][id(x)],);
}
//PR(dp[1],37);
int ans=;
for(int i=;i<=l+;++i)
{
int min_=inf;
for(int j=;j<=;++j)
min_=min(min_,dp[i-][j]);
ans=min_;
if(i==l+)break; int temp=v[s[i]];
int cnt=;
int mp[];
while(temp>)
{
mp[cnt]=temp%;
temp/=;
cnt--;
}
for(int j=;j<=;++j)
{
int x=mp[p[j].a],y=mp[p[j].b],z=mp[p[j].c];
// cout<<x<<' '<<y<<' '<<z<<endl;
dp[i][id(x*+y*+z)]=min(dp[i][id(x*+y*+z)],min(min(dp[i-][id(x)]+,min(min_+,dp[i-][id(x*+y)]+)),dp[i-][id(x*+y*+z)]));
dp[i][id(y*+z)]=min(dp[i][id(y*+z)],min(min(dp[i-][id(x)]+,min(min_+,dp[i-][id(x*+y)]+)),dp[i-][id(x*+y*+z)]));
dp[i][id(z)]=min(dp[i][id(z)],min(min(dp[i-][id(x)]+,min(min_+,dp[i-][id(x*+y)]+)),dp[i-][id(x*+y*+z)]));
}
// PR(dp[i],37);
}
pr("%d\n",ans+l);
}
return ;
} /**************************************************************************************/ int maxx(int a,int b)
{
return a>b?a:b;
} void swapp(int &a,int &b)
{
a^=b^=a^=b;
} int lowbit(int n)
{
return n&(-n);
} int Del_bit_1(int n)
{
return n&(n-);
} int abss(int a)
{
return a>?a:-a;
} double fabss(double a)
{
return a>?a:-a;
} int minn(int a,int b)
{
return a<b?a:b;
}
Invoker(小DP)的更多相关文章
- HDU6739 Invoker 【dp】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6739 借鉴了这个网址的题解:https://blog.csdn.net/qq_41785863/art ...
- K 破忒头的匿名信(ac自动机+小dp)
题:https://ac.nowcoder.com/acm/contest/4010/K 题意:用一些模式串凑成一个目标串,每个模式串有消耗,问组合的最小消耗,或不能组成输出-1: 分析:典型的AC自 ...
- 1003: [ZJOI2006]物流运输 = DP+SBFA
题意就是告诉你有n个点,e条边,m天,每天都会从起点到终点走一次最短路,但是有些点在某些时间段是不可走的,因此在某些天需要改变路径,每次改变路径的成本是K,总成本=n天运输路线长度之和+K*改变运输路 ...
- POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)
Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...
- 三:背包DP
01背包问题描述 已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]. 限制:每种物品只有一件,可以选择放或者不放 问题:在不超过背包容量的情况下,最多能 ...
- bzoj 2017: [Usaco2009 Nov]硬币游戏【dp】
废了废了,一个小dp都想不出来 把c数组倒序一下,变成1在最下,设f[i][j]为某一人取完j个之后还剩1~i的硬币,转移的话应该是f[i][j]=max(s[i]-f[i-k][k]),就是1~n的 ...
- POJ 3280 Cheapest Palindrome ( 区间DP && 经典模型 )
题意 : 给出一个由 n 中字母组成的长度为 m 的串,给出 n 种字母添加和删除花费的代价,求让给出的串变成回文串的代价. 分析 : 原始模型 ==> 题意和本题差不多,有添和删但是并无代价 ...
- SP8222 NSUBSTR - Substrings(后缀自动机+dp)
传送门 解题思路 首先建出\(sam\),然后把\(siz\)集合通过拓扑排序算出来.对于每个点只更新它的\(maxlen\),然后再从大到小\(dp\)一次就行了.因为\(f[maxlen-1]&g ...
- USACO 2007 February Silver The Cow Lexicon /// DP oj24258
题目大意: 输入w,l: w是接下来的字典内的单词个数,l为目标字符串长度 输入目标字符串 接下来w行,输入字典内的各个单词 输出目标字符串最少删除多少个字母就能变成只由字典内的单词组成的字符串 Sa ...
随机推荐
- Django-模板继承/组件/自定义标签
一.标签tags for标签 遍历每一个元素: 写个for,然后 tab键自动生成for循环的结构,循环很基础,就这么简单的用,没有什么break之类的,复杂一些的功能,你要通过js def get ...
- 【零基础】简单说说一键果体APP的AI
参考: https://www.jianshu.com/p/8c7a7cb7198c https://blog.csdn.net/gdymind/article/details/82696481 零. ...
- TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器
TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器 任务清单 给自己取一个酷酷的id,并选择1-2个喜欢的方向.(只是初步选择,后期可更改) 改下群名片.例如yo ...
- 【Mybatis】向MySql数据库插入千万记录 单条插入方式,用时 1h16m30s
本例代码下载:https://files.cnblogs.com/files/xiandedanteng/InsertMillionComparison20191012.rar 相对于批量插入,这种方 ...
- CefGlue获取网页源代码
1.编写一个CefStringVisitor类: public class MyStringVisitor : CefStringVisitor { private readonly TaskComp ...
- Mysql查询某字段重复值并删除重复值
1.查询重复值: select code,count(*) as count from hospital group by code having count>1; 该语句查询code重复值大于 ...
- LC 670. Maximum Swap
Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...
- Jmeter配置联机负载生成密钥失败的问题解决
在配置负载联机时, 控制机上需要生成密钥供负载机使用. 在bin目录下双击create-rmi-keystore.bat时, 弹出错误提示: 'XXXX'不是内部或外部命令, 这种典型的错误一看就环境 ...
- <linux-sed> sed基本用法
1.简介 sed全称是Stream Editor,是非交互式的编辑器.它不会修改原文件,除非使用shell重定向来保存结果, 或者可以指定-i选项来在线修改文件,这样就会改变原文件,升级脚本通常用-i ...
- centos7安装redis3.2.5集群
安装参照 https://blog.csdn.net/mingliangniwo/article/details/54600640 https://blog.csdn.net/u013820 ...