一个国贸作业
来源:互联网 发布:中国审美欧化 知乎 编辑:程序博客网 时间:2024/05/01 23:55
我现在在大学读的是经济学专业,上周国贸老师布置了一个作业,让我们计算出全球所有国家所有出口产品的显示比较优势指数和技术附加值,因为有20多万组数据,所以我马上想到了写代码,没什么算法难度,但是数据多,并且找的数据是有问题的,花了两节晚自习肉眼查错,把二十多万组数据里的十个左右的错误找出来了,然后是排序,相当于把一组数据分成5分,要求对每一份算个方差,求最优策略
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;const int n = 206928;const int m = 2645;int hash[100000];double sum=0;double gvs[1000],w[250000],irca[100000]; double rtv[250000],rca[250000],ivs[100000];double dp[m+100][10];double ff[m+100],g[m+100];int mean[m+100][10];struct node{int gd,sd;double v,gdp;}f[250000];void init(){freopen("gmin.txt","r",stdin);freopen("gmout.txt","w",stdout);}void readdata(){int u=1;double t;for(int i=1;i<=n;i++){scanf("%d",&f[i].gd);if(u!=f[i].gd||i==1){scanf("%d%lf%lf",&f[i].sd,&f[i].v,&f[i].gdp);u=f[i].gd;t=f[i].gdp;}else {scanf("%d%lf",&f[i].sd,&f[i].v);f[i].gdp = t;}}for(int i=1;i<=n;i++) sum += f[i].v;for(int i=1;i<=300;i++) gvs[i]=0;for(int i=1;i<=100000;i++) {hash[i]=0;ivs[i]=0;}for(int i=1;i<=1000;i++) gvs[i] = 0;for(int i=1;i<=250000;i++) {w[i] = 0;rca[i] = 0;rtv[i]=0;}for(int i=1;i<=100000;i++) irca[i] = 0;for(int i=1;i<=m;i++)for(int j=1;j<=5;j++)dp[i][j]=1000000000;}double fc(int a,int b){if(a==b) return 0;double r=0,t;t=(ff[b]*b-ff[a-1]*(a-1))/(b-a+1);for(int i=a;i<=b;i++) r+=sqrt((g[i]-t)*(g[i]-t)/(b-a+1));return r;}void work(){int u=f[1].gd;gvs[f[1].gd] += f[1].v;for(int i=2;i<=n;i++){if(u==f[i].gd){gvs[f[i].gd] += f[i].v; } else{gvs[f[i].gd] += f[i].v;u=f[i].gd;}}for(int i=1;i<=n;i++){if(hash[f[i].sd]) continue;else {hash[f[i].sd] = 1;ivs[f[i].sd] += f[i].v;}for(int j=i+1;j<=n;j++){if(f[j].sd == f[i].sd) {ivs[f[j].sd]+=f[j].v;}}}for(int i=1;i<=n;i++){rca[i] = ((f[i].v / ivs[f[i].sd])/(gvs[f[i].gd]/sum));}int p;for(int i=1;i<=100000;i++) hash[i]=0;for(int j=1;j<=n;j++){if(hash[f[j].sd]) continue;hash[f[j].sd] = 1;p=f[j].sd;irca[f[j].sd] += rca[j];for(int i=j+1;i<=n;i++){if(f[i].sd == p){irca[f[i].sd] += rca[i];}}}for(int i=1;i<=n;i++){w[i] = rca[i] / irca[f[i].sd];}for(int i=1;i<=100000;i++) hash[i]=0;for(int i=1;i<=n;i++) {if(hash[f[i].sd]) continue;hash[f[i].sd]=1;double amount=0;p=f[i].sd;for(int j=i;j<=n;j++){if(f[j].sd == p)amount += w[j]*(log(f[j].gdp)/log(exp(1))); }rtv[i]=amount;}p=1;for(int i=1;i<=n;i++){if(rtv[i]){g[p] = rtv[i];p++;}}}void classify(){sort(g,g+m+1);ff[1]=g[1];for(int i=2;i<=m;i++) ff[i]=(ff[i-1]*(i-1)+g[i])/i;for(int i=1;i<=m;i++) dp[i][1]=fc(1,i);for(int j=2;j<=5;j++)for(int i=j;i<=m;i++)for(int k=j-1;k<i;k++){if(dp[i][j] > dp[k][j-1]+fc(k+1,i)){dp[i][j]=dp[k][j-1]+fc(k+1,i);mean[i][j]=k;}}//printf("%lf\n",dp[m][5]);int x=mean[m][5];printf("%d\n",x);x=mean[x][4];printf("%d\n",x);x=mean[x][3];printf("%d\n",x);x=mean[x][2];printf("%d\n",x);}int main(){init();readdata();work();classify();return 0;}
0 0
- 一个国贸作业
- 国贸的基础知识
- 国贸饭店的流程改进
- 一个摘要作业
- C++的一个作业。。。
- 一个java小作业
- 一个算法作业--最大公约数
- 构建一个Mapreduce作业
- 一个库里脑残粉的作业
- 其中的一个作业
- 作业的一个网页
- 我在中关村给不了你国贸的爱
- 一个SparkSQL作业的一生
- 作业: 编写一个JFrame窗口
- SQL SERVER学校作业的一个文档
- Visual FoxPro 的一个排序作业
- Linux下的一个作业程序
- Linux下完成的一个作业程序
- Swift使用CG和CI framework画棋盘
- Leetcode 28 Implement strStr()
- POJ 2438 Children's Dining 哈密顿回路
- QT 等待对话框/进度--
- 点击CheckBox复选框是否记住密码
- 一个国贸作业
- 调用系统的短信和邮件功能,实现发送指定内容等
- 使用Spring(九)自动装配(autowire)协作者
- 卡特兰数
- 在window下,如何把自己的项目代码上传到Github上?
- STL学习之路二(set与multiset)
- github版本回退
- Leetcode 419. Battleships in a Board 战舰数量 解题报告
- 什么是make config,make menuconfig,make oldconfig,make xconfig,make defconfig,make gconfig?