您的位置:首页 > 其它

matrix_last_acm_4

2015-11-01 15:20 387 查看
2013 ACM-ICPC吉林通化全国邀请赛

A http://acm.hust.edu.cn/vjudge/contest/view.action?cid=97654#problem/A

题意:输入12个数,输出平均值,但是不能有多余的后缀的零。直接。2f wa了一发。

解法:用sprintf 放到char【】里,然后去掉后面的0.

//#define debug
//#define txtout
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cctype>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define mt(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const int M=25;
int a[M];
int b[M];
int sa[M];
int sb[M];
int n;
int dp[M][M][M][M];
void init_sum(int sum[],int v[]){
sum[0]=0;
for(int i=1;i<=n;i++){
sum[i]=sum[i-1]+v[i];
}
}
void init_dp(){
for(int x1=0;x1<=n;x1++){
for(int y1=0;y1<=n;y1++){
for(int x2=0;x2<=n;x2++){
for(int y2=0;y2<=n;y2++){
dp[x1][y1][x2][y2]=-1;
}
}
}
}
}
int get_sum(int x1,int y1,int x2,int y2){
int result=sa[y1]+sb[y2];
if(x1) result-=sa[x1-1];
if(x2) result-=sb[x2-1];
return result;
}
int dfs(int x1,int y1,int x2,int y2){
int& answer=dp[x1][y1][x2][y2];
if(answer!=-1) return answer;
if(x1<y1){
answer=max(answer,a[x1]+get_sum(x1+1,y1,x2,y2)-dfs(x1+1,y1,x2,y2));
answer=max(answer,a[y1]+get_sum(x1,y1-1,x2,y2)-dfs(x1,y1-1,x2,y2));
}
if(x2<y2){
answer=max(answer,b[x2]+get_sum(x1,y1,x2+1,y2)-dfs(x1,y1,x2+1,y2));
answer=max(answer,b[y2]+get_sum(x1,y1,x2,y2-1)-dfs(x1,y1,x2,y2-1));
}
if(x1==y1&&x1){
answer=max(answer,a[x1]+get_sum(0,0,x2,y2)-dfs(0,0,x2,y2));
}
if(x2==y2&&x2){
answer=max(answer,b[x2]+get_sum(x1,y1,0,0)-dfs(x1,y1,0,0));
}
return answer;
}
int solve(){
init_sum(sa,a);
init_sum(sb,b);
init_dp();
dp[0][0][0][0]=0;
for(int i=1;i<=n;i++){
dp[i][i][0][0]=a[i];
dp[0][0][i][i]=b[i];
}
return dfs(1,n,1,n);
}
int main(){
#ifdef txtout
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int t;
while(~scanf("%d",&t)){
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
}
printf("%d\n",solve());
}
}
return 0;
}


View Code

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: