CodeForces 73C LionAge II
来源:互联网 发布:中国软件资讯网 编辑:程序博客网 时间:2024/05/02 04:30
Vasya plays the LionAge II. He was bored of playing with a stupid computer, so he installed this popular MMORPG, to fight with his friends. Vasya came up with the name of his character — non-empty string s, consisting of a lowercase Latin letters. However, in order not to put up a front of friends, Vasya has decided to change no more than k letters of the character name so that the new name sounded as good as possible. Euphony of the line is defined as follows: for each pair of adjacent letters x and y (x immediately precedes y) the bonus c(x, y) is added to the result. Your task is to determine what the greatest Euphony can be obtained by changing at most k letters in the name of the Vasya's character.
The first line contains character's name s and an integer number k (0 ≤ k ≤ 100). The length of the nonempty string s does not exceed 100. The second line contains an integer number n (0 ≤ n ≤ 676) — amount of pairs of letters, giving bonus to the euphony. The next n lines contain description of these pairs «x y c», which means that sequence xy gives bonus c (x, y— lowercase Latin letters, - 1000 ≤ c ≤ 1000). It is guaranteed that no pair x y mentioned twice in the input data.
Output the only number — maximum possible euphony оf the new character's name.
winner 44s e 7o s 8l o 13o o 8
36
abcdef 15a b -10b c 5c d 5d e 5e f 5
20
In the first example the most euphony name will be looser. It is easy to calculate that its euphony is 36.
题意:给你一个串,你一次操作可以改变任意一个字符,但是你的操作次数最多为k次。再给出n对
代表这两个字符如果相邻,那么会产生c的价值。问最后你可以得到的最多价值是多少。
思路:很明显是一道dp的题目,于是就开始想dp的状态,首先给定字符串的长度一定是要的,操作
次数也是要的,但是这样还是不够解。于是就想了一个三维的dp;
dp[pos][k][i]: pos--代表第pos位,k--代表改变了k次,i代表把pos这个位子的字符改成i;
状态转移 从当前pos位置状态推出pos+1位置的状态。这时候只需要再for一个下一个状态的字符是什
么,就可以进行转移了,如果下一个状态的字符就是原串的字符那么k不改变,如果不是那么k+1;
#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#include<iostream>#include<stdlib.h>#include<set>#include<map>#include<queue>#include<stack>#include<vector>#include<bitset>#pragma comment(linker, "/STACK:1024000000,1024000000")template <class T>bool scanff(T &ret){ char c; int sgn; T bit=0.1; if(c=getchar(),c==EOF) return 0; while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); if(c==' '||c=='\n'){ ret*=sgn; return 1; } while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10; ret*=sgn; return 1;}#define inf 1073741824#define llinf 4611686018285162540LL#define eps 1e-8#define mod 9223372034707292160LL#define pi acos(-1.0)#define lth (th<<1)#define rth (th<<1|1)#define rep(i,a,b) for(int i=a;i<=b;i++)#define drep(i,a,b) for(int i=a;i>=b;i--)#define mset(x,val) memset(x,val,sizeof(x))#define mcpy(x,y) memcpy(x,y,sizeof(y))#define findx(x) lower_bound(b+1,b+1+bn,x)-b#define fuck puts("FUCK!")#define mpii(a,b) make_pair(a,b);#define NN 101010#define MM 202020using namespace std;typedef unsigned long long ll;typedef long double lb;typedef pair<int,int> pii;int dp[111][111][111],kk,len,n,val;char s[111],c,d;int a[268][268];int main(){ scanf("%s%d",s,&kk); scanf("%d%*C",&n); len=strlen(s); mset(dp,0); mset(a,0); rep(i,1,n){ scanf("%c%*C%c",&c,&d); scanf("%d%*C",&val); a[c][d]=val; } rep(pos,0,len){ rep(k,0,kk){ for(int i='a';i<='z';i++){ dp[pos][k][i]=-inf; } } } for(int i='a';i<='z';i++) dp[0][1][i]=0; dp[0][0][s[0]]=0; rep(pos,0,len){ rep(k,0,kk){ for(int i='a';i<='z';i++){ if(dp[pos][k][i]==-inf) continue; for(int j='a';j<='z';j++){ int tmp=1; if(s[pos+1]==j)tmp=0; dp[pos+1][k+tmp][j]=max(dp[pos+1][k+tmp][j],dp[pos][k][i]+a[i][j]); } } } } int ans=-inf; for(int i=0;i<=kk;i++){ for(int j='a';j<='z';j++){ ans=max(ans,dp[len-1][i][j]); } } printf("%d\n",ans); return 0;}
- CodeForces 73C LionAge II
- CodeForces 73C LionAge II Dp
- codeforces LionAge II DP
- codefores 73C LionAge II (dp)
- Codeforces 346C Number Transformation II 构造
- codeforces Number Transformation II
- Number Transformation II CodeForces
- Codeforces Round #201 (Div. 1) C. Number Transformation II(思路)
- Codeforces-340-C(c++)
- Codeforces-507-C(c++)
- CodeForces 731C C
- CodeForces-612C C
- μC/OS-II
- C语言复习II
- 《Effective C++》读书笔记II
- codeforces 304A. Pythagorean Theorem II
- CodeForces 304A Pythagorean Theorem II
- Codeforces 347E - Number Transformation II
- 图解电脑上Firefox浏览器无法打开的解决办法
- 关于Android的隐式意图(调用系统图库和照相机设置图片)
- Java序列化与反序列化
- hdu 4027(区间更新)
- 概率论:高斯/正态分布
- CodeForces 73C LionAge II
- sicily 1129. ISBN
- ubuntu自定义通知
- 1092. To Buy or Not to Buy
- JAVA中的数据存储(堆及堆栈)
- [C++]输入输出流
- sicily 1133. SPAM
- SQLiteOpenHelper类
- jquery修改a标签的href链接和文字