3月13号周练——2015 Multi-University Training Contest 9
2016-03-13 15:56
447 查看
2015 Multi-University Training Contest 9
A. Expression(理解原理 区间DP)
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<vector> #include<queue> #include<cmath> #define maxn 105 #define mod 1000000007 using namespace std; long long dp[maxn][maxn]; long long A[maxn],C[maxn][maxn]; char operations[maxn]; int a[maxn],n; /*初始化从0到maxn的阶乘模mod*/ void init() { int i,j; A[0] = 1; for(i = 1;i < maxn; i++) { A[i] = (A[i-1]*i)%mod; } C[0][0] = 1; for(i=1; i<=100; i++) { C[i][0] = 1; for(j=1; j<=i; j++) C[i][j] = (C[i-1][j-1] + C[i-1][j])%mod; } } void solve() { int len,l,r,k; for(l = 1;l <= n;l ++) dp[l][l] = a[l]; for(len = 2;len <= n;len ++) { for(l = 1;l + len - 1 <= n; l ++) { long long t; r = l + len -1; for(k = l;k < r;k ++) { if(operations[k] == '+'){ t = (dp[l][k]*A[r-k-1] + dp[k+1][r]*A[k-l])%mod; } else if(operations[k] == '-'){ t = (dp[l][k]*A[r-k-1] - dp[k+1][r]*A[k-l])%mod; } else{ t = (dp[l][k]* dp[k+1][r])%mod; } dp[l][r] = (dp[l][r] + t* C[r-l-1][k-l])%mod; } } } } int main() { init(); while(cin >> n) { memset(dp, 0, sizeof(dp)); int i,j; for(i = 1;i <= n;i ++){ cin >> a[i]; } for(i = 1;i < n;i ++){ cin >> operations[i]; } solve(); cout << (dp[1] +mod)%mod << endl; //此段代码借鉴的,为什么? } return 0; }
小结:此题看过题解后,思路是对的,但是对取模的机制和组合数的求法不是很熟练,需要加强。
Travelling Salesman Problem
#include <iostream> #include<cstdio> #define maxn 105 #define black 1 #define white 0 using namespace std; int n,m; long long sum,min; int map[maxn][maxn],color[maxn][maxn]; //color[][] = 0/1,1代表白色,0代表黑色 void init() { int i ,j; bool tmp = true; for(i = 1;i <= n;i ++) { for(j = 1;j <= m;j ++) { if(tmp) color[i][j] = black; else color[i][j] = white; tmp = !tmp; } } } int main() { while(scanf("%d %d",&n,&m)!=EOF) { init(); sum = 0; int i,j; for(i = 1;i <= n;i ++) { for(j = 1;j <= m;j ++) { scanf("%d",&map[i][j]); sum += map[i][j]; } } /*行数n为奇数*/ if(n%2!=0) { printf("%lld\n",sum); for(i = 1;i <= n;i ++) { if(i%2 != 0) { for(j = 1;i < m;i ++) printf("R"); } else { printf("D"); for(j= 1;j < m;j ++) printf("L"); } } } /*行数为偶数,但列数为奇数*/ else if(m%2 != 0) { printf("%lld\n",sum); for(i = 1;i <= m;i ++) { if(i%2 != 0) { for(j = 1;i < n;i ++) printf("D"); } else { printf("L"); for(j= 1;j < n;j ++) printf("U"); } } } /*行列都为偶数*/ else { } } return 0; }
相关文章推荐
- 多线程中的锁系统(三)-WaitHandle、AutoResetEvent、ManualResetEvent
- 最常用的框架和main分析
- C. Mail Stamps---cf29c(离散化,图)
- [LeetCode] Palindrome Pairs 回文对
- CSU 1685-Entertainment Box(set+二分)
- 【CodeForces19E】Fairy
- opencv haartraining训练过程总结dir /b > info.txt
- Codeforces Round #345 (Div. 2) B. Beautiful Paintings
- TaintDroid下载与编译(六):(常出现的error)
- 关于main参数 *argv[] 指向空间放在哪的疑问
- 人工智能随想
- HDU1021Fibonacci Again
- 在RHEL7或者OL7上,Documents Fail to Index with DRG-11207: user filter command exited with status 127
- Ordered Fractions--最大公约数+pair
- 【leetcode】Array——Contains Duplicate II(219)
- 使用 flask-mail 扩展发送邮件
- sakai的工程
- pthread_cond_wait()条件变量
- [leetcode] 256. Paint House 解题报告
- AI和IA之随想