您的位置:首页 > 其它

SRM 559 div 2【AK】

2012-10-31 16:39 288 查看
250pt.

题意:给定n块砖,编号0~n-1,选一定的砖摞起来,要求上面的砖编号比下面的大,并且偶数高度的不能放在奇数高度的上面,求最大高度。

解法: dp[i][0]记录选完前i块并且此时最上面一块高度为偶数的最优解

   dp[i][1]记录选完前i块并且此时最上面一块高度为奇数的最优解。。。

1000pt

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define M 55
using namespace std;
class ToyTrain{
public:
int getMinCost(vector <string> s){
int r[M][M],d[M][M];
int hash[M];
bool v[M][M];
memset(hash,0,sizeof(hash));
memset(r,0,sizeof(r));
memset(d,0,sizeof(d));
int ans=0;
for(int i=0;i<s.size();i++){
for(int j=0;j<s[i].size();j++){
int up,right;
up=right=0;
if(j-1>=0) right=r[i][j-1];
if(i-1>=0) up=d[i-1][j];
if(s[i][j]=='.'||(s[i][j]>='0'&&s[i][j]<='9')){
if(right==0&&up==0)continue;
else if(!(right!=0&&up!=0)){
r[i][j]=right;
d[i][j]=up;
if(s[i][j]>='0'&&s[i][j]<='9'){
if(!hash[s[i][j]-'0']){
ans+=(s[i][j]-'0');
hash[s[i][j]-'0']=1;
}
}
s[i][j]='S';
}
else return -1;
}
else if(s[i][j]=='A'){
if(right==0&&up==0){
r[i][j]=1;d[i][j]=1;
}
else if(right==0&&up!=0){
if(up==1){
return -1;
}
else{
r[i][j]=1;
d[i][j]=0;
}
}
else if(right!=0&&up==0){
if(right==1){
return -1;
}
else{
r[i][j]=0;
d[i][j]=1;
}
}
else{
if(!(right==-1&&up==-1))
return -1;
}
}
else if(s[i][j]=='B'){
if(right==0&&up==0){
r[i][j]=-1;
d[i][j]=-1;
}
else if(right==0&&up!=0){
if(up==-1){
return -1;
}
else{
r[i][j]=-1;
d[i][j]=0;
}
}
else if(right!=0&&up==0){
if(right==-1){
return -1;
}
else{
r[i][j]=0;
d[i][j]=-1;
}
}
else{
if(!(right==1&&up==1))
return -1;
}
}
else{
if(right==up){
return -1;
}
else if(right==0&&up!=0){
r[i][j]=0;
d[i][j]=up;
}
else if(right!=0&&up==0){
d[i][j]=0;
r[i][j]=right;
}
}
}
}
memset(v,0,sizeof(v));
bool flag=0;
for(int i=0;i<s.size();i++){
int sum=0;
for(int j=0;j<s[i].size();j++){
sum+=d[i][j];
if(s[i][j]=='A'||s[i][j]=='B'||s[i][j]=='S')flag=1;
}
if(sum!=0)return -1;
}
for(int j=0;j<s[0].size();j++){
int sum=0;
for(int i=0;i<s.size();i++){
sum+=r[i][j];
}
if(sum!=0)return -1;
}
if(flag==0)return -1;
else return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: