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.
View Code
end
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
相关文章推荐
- 最常用的排序——快速排序
- 程序员必备:100本免费编程图书(英文)
- No.6 Single Number II 一组数都出现n次除了某个数,找出这个数
- Codestorm:Game with a Boomerang
- 基于opencv的符号提取源代码
- InterView common question
- leetcode@ [209]Minimum Size Subarray Sum
- Codestorm:Game with a Boomerang
- maven的聚合和继承(三)
- C++primer学习:模板编程(2):类模板的定义
- 证明N个节点构成一棵树的种类数
- Mysql学习笔记一, 安装Mysql,简单命令学习
- 记一次被中间人攻击的经历
- Terminal终端的快捷键
- Mysql:is not allowed to connect to this MySQL server
- Linux文件系统分析之五(常规文件的表示)
- Linux文件系统分析之四(目录项)
- 高通Adreno图形处理器全解析
- 学习code的几个相当不错的搜索引擎
- Eclipse添加和查看书签