codeforce-628B-Cards
来源:互联网 发布:小满科技 数据怎么样 编辑:程序博客网 时间:2024/04/30 20:56
题目大意:给你3种颜色的卡片若干张,你有两种操作:
1.挑选两张颜色一样的卡片变为一张那张颜色的卡片;
2.挑选两张颜色不一样的卡片变为低三种颜色的卡片吗;
问你最后会有什么情况;
题目解析:
不难发现每次操作之后卡片总数就减少一,为了记录各种卡片的个数,我们这里可以开一个三维dp[i][j][k];i表示取了第几次,因为最后肯定只剩1张卡片,而每次总数减少一,所以一共取了n-1次;j表示R的个数,k表示G的个数,而dp[i][j][k]本身的值就是B的个数;
状态方程很好理解,枚举即可;
AC代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>using namespace std;int main(){int dp[201][201][201],r,n,b,g,i,j,k,sum;string s;while(scanf("%d",&n)!=EOF){r=0;b=0;g=0;cin>>s;for(i=0;i<s.size();i++){if(s[i]=='R')r++;else if(s[i]=='B')b++;else g++;}sum=1+r+b+g;for(i=0;i<=200;i++)for(j=0;j<=200;j++)for(k=0;k<=200;k++)dp[i][j][k]=-1;dp[1][r][b]=g;for(i=1;i<=n;i++){for(j=0;j<=200;j++){for(k=0;k<=200;k++){if(dp[i][j][k]!=-1){if(j-1>=0&&k-1>=0)dp[i+1][j-1][k-1]=sum-j-k+1-i;if(j-1>=0&&sum-j-k-i-1>=0)dp[i+1][j-1][k+1]=sum-j-k-i-1;if(k-1>=0&&sum-j-k-i-1>=0)dp[i+1][j+1][k-1]=sum-j-k-i-1;if(j-1>=1)dp[i+1][j-1][k]=sum-k-j-i;if(k-1>=1)dp[i+1][j][k-1]=sum-k-j-i;if(sum-j-k-i-1>=1)dp[i+1][j][k]=sum-j-k-i-1;}}}}if(dp[n][0][1]==0)cout<<"B";if(dp[n][0][0]==1)cout<<"G";if(dp[n][1][0]==0)cout<<"R";cout<<endl;}return 0;}
0 0
- codeforce-628B-Cards
- Codeforce 731 F. Video Cards
- CodeForce 628B New Skateboard 水题
- 626B-Cards
- cf B. Cards
- CodeForces-626B-Cards
- CF 626 B. Cards
- Codeforce # B Sequence Formatting
- codeforce 298 B Sail
- 【codeforce】B. Flag Day
- codeforce B. Road Construction
- CodeForce 126B
- codeforce #247 B(div2)
- codeforce 6B dfs
- codeforce 7B
- codeforce 9B
- codeforce 13B
- codeforce 15B
- IOS、java支持DES加密
- uboot and 文件系统 烧写
- 记录学习的点滴(Js跳转)
- Ubuntu下安装&卸载apache2服务
- Toast总结二
- codeforce-628B-Cards
- React Native 学习笔记十三(原生模块之Toast)
- java中string stringbuffer和stringBuilder区别
- Swift 指南
- 探寻次时代渲染 - CryEngine2
- android知识小贴士之二:基于位置的服务
- 解决Genymotion模拟器不能上网的问题
- python实现微信提醒({“errcode”:41011,”errmsg”:”missing agentid”})
- lr参数化取值规则总结