【SPOJ】【Mixtures】
来源:互联网 发布:python设置定时任务 编辑:程序博客网 时间:2024/05/02 19:34
Description
Harry Potter has n mixtures in front of him, arranged in a row. Each mixture has one of 100 different colors (colors have numbers from 0 to 99).
He wants to mix all these mixtures together. At each step, he is going to take two mixtures that stand next to each other and mix them together, and put the resulting mixture in their place.
When mixing two mixtures of colors a and b, the resulting mixture will have the color (a+b) mod 100.
Also, there will be some smoke in the process. The amount of smoke generated when mixing two mixtures of colors a and b is a*b.
Find out what is the minimum amount of smoke that Harry can get when mixing all the mixtures together.
Input
There will be a number of test cases in the input.
The first line of each test case will contain n, the number of mixtures, 1 <= n <= 100.
The second line will contain n integers between 0 and 99 - the initial colors of the mixtures.
Output
For each test case, output the minimum amount of smoke.
Example
Input:218 19340 60 20Output:3422400
In the second test case, there are two possibilities:
- first mix 40 and 60 (smoke: 2400), getting 0, then mix 0 and 20 (smoke: 0); total amount of smoke is 2400
- first mix 60 and 20 (smoke: 1200), getting 80, then mix 40 and 80 (smoke: 3200); total amount of smoke is 4400
The first scenario is a much better way to proceed.
#include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int num;int arr[110];int sum[110];int dp[110][110];int G[110][110];int main(){freopen("1.txt","r",stdin);while(scanf("%d",&num) != EOF){memset(arr,0,sizeof(arr));memset(sum,0,sizeof(sum));memset(dp,0,sizeof(dp));for(int i=1;i<=num;i++){scanf("%d",&arr[i]);//if(i == 1)//continue;sum[i] = sum[i-1] + arr[i];}//cout << "sum0 " << sum[0] << " sum1 " << sum[1] << endl;for(int i=1;i<=num;i++){for(int j=i;j<=num;j++){ G[i][j] = (sum[j] - sum[i-1]) % 100;//cout << "==== i: " << i << " j:" << j << G[i][j] << "====" << endl;}}for(int inter=1;inter<num;inter++){for(int i=1;i<=num-inter;i++){int j = i + inter;dp[i][j] = 0x3f3f3f3f;for(int k=i;k<j;k++){dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j] + G[i][k]*G[k+1][j]);//if(dp[i][j] == dp[i][k] + dp[k+1][j] + G[i][k] * G[k+1][j])//{//G[i][j] = //}}}}printf("%d\n",dp[1][num]);}}
- 【SPOJ】【Mixtures】
- SPOJ MIXTURES
- SPOJ 345. Mixtures 动规
- SPOJ 345 Mixtures (区间DP&前缀数组)
- SPOJ 345 Mixtures(JAVA版)
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- SPOJ
- 7月12日 SQL Server 等待类型
- 深度学习在图像识别中的发展进程与展望
- [Java]_[初级]_[String的split里的坑]
- hdu(3047)——Zjnu Stadium(高级并查集)
- A glance on RPC
- 【SPOJ】【Mixtures】
- 如何搭建高质量高效的持续集成平台
- iOS开发之——颜色设置
- cordova环境搭建-Windows
- Mac上的抓包工具Charles
- OpenGL蓝宝书第六章代码疑虑:为什么使用了GL_TEXTURE_1D??纹理和顶点间的映射是如何实现?
- aws ec2基本环境安装lamp和vsftp
- 第12课第1节 字符设备驱动概念介绍
- 黑马程序员