2014鞍山现场赛D题 E题||hdu5073、5074
来源:互联网 发布:青岛男科医院网络预约 编辑:程序博客网 时间:2024/04/29 10:25
E题:http://acm.hdu.edu.cn/showproblem.php?pid=5074
大意:给定n个数他们的取值范围为:1~m,如果a[i]的值为正数,那么该值不能改变,如果为负数则可以改变为1~m之间的任意数,已知1~m之间任意一对数所代表的美丽值sum[i][j],相邻两个组成一对数,问:怎样安排待定的数,可以使得整个数列美丽值之和最大。
/**dp[i][j]表示第i个数取j前i个数的最大值。第i个数的状态只和i-1有关,只需考虑a[i],a[i-1]的取值可能性即可,总共有四种情况(负,负)(负,正)(正,正)(正,负)然后各种转移即可,详见代码。*/#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int sum[110][110],dp[110][110],a[110],n,m;;int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) for(int j=1; j<=m; j++) scanf("%d",&sum[i][j]); for(int i=1; i<=n; i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(int i=2; i<=n; i++) for(int j=1; j<=m; j++) if(a[i-1]>0) { if(a[i]>0) { dp[i][a[i]]=dp[i-1][a[i-1]]+sum[a[i-1]][a[i]]; break; } else dp[i][j]=dp[i-1][a[i-1]]+sum[a[i-1]][j]; } else { if(a[i]>0) dp[i][a[i]]=max(dp[i][a[i]],dp[i-1][j]+sum[j][a[i]]); else for(int k=1; k<=m; k++) dp[i][j]=max(dp[i][j],dp[i-1][k]+sum[k][j]); } int ans=0; for(int i=1; i<=m; i++) ans=max(ans,dp[n][i]); printf("%d\n",ans); } return 0;}
D题:http://acm.hdu.edu.cn/showproblem.php?pid=5073
大意:给定n个数,分别代表其距这些数平均数的距离,然后可以去掉k个数(平均数随之改变)求去那几个数后,剩下的数到平均数距离的差最小(方差最小)
/**去掉k个数之后剩下n-k个数,它们越集中,方差一定会越小,因此我们去掉该去的后,剩下的区间肯定是连续且长度为n-k的直接枚举即可,把n个数进行排序,求出前缀和以及前缀平方和,把复杂度降到O(n),否则会超时的。详见代码*/#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int N=50004;double a[N];int n,k;double s[N],p[N];int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&k); int ff=n-k; for(int i=1; i<=n; i++) scanf("%lf",&a[i]); a[0]=0; if(ff==0||ff==1) { printf("0\n"); continue; } sort(a+1,a+n+1); p[0]=0.0; s[0]=0.0; for(int i=1; i<=n; i++) { s[i]=s[i-1]+a[i]; p[i]=p[i-1]+a[i]*a[i]; } double sum=s[n]/ff; double ans=p[n]+ff*sum*sum-2*s[n]*sum; for(int i=ff; i<=n; i++) { sum=(s[i]-s[i-ff])/ff; double cnt=(p[i]-p[i-ff])+ff*sum*sum-2*(s[i]-s[i-ff])*sum; ans=min(ans,cnt); } printf("%.12lf\n",ans); } return 0;}
0 0
- 2014鞍山现场赛D题 E题||hdu5073、5074
- HDU5073 ACM-ICPC亚洲区域赛鞍山赛区现场赛D题 Galaxy 贪心+数学推导
- 2014 鞍山 现场赛 E题题解
- hdu 5074 Hatsune Miku (鞍山现场赛E题)
- HDU 5073 Galaxy (2014鞍山现场赛D题)
- hdu 5073 Galaxy /2014鞍山现场赛D题
- HDU 5074 Hatsune Miku [dp] ——2014鞍山现场赛E题
- hdu 5073 Galaxy (鞍山现场赛D题)
- hdu 5074 DP 2014鞍山现场赛题
- HDU 5073 Galaxy (2014 ACM/ICPC 鞍山赛区现场赛D题)
- hdu5073 -- 贪心(2014西安现场赛)
- hdu 5073 2014鞍山现场赛题 物理题
- 2014ACM/ICPC亚洲区鞍山赛区现场赛E(hdu 5074)
- HDU 5074 Hatsune Miku (基础DP)2014鞍山现场赛E
- HDU5074 ACM-ICPC亚洲区域赛鞍山赛区现场赛E题 Hatsune Miku 二维DP
- HDU-5001 Walk 2014年鞍山网络赛E题
- 2014鞍山网络赛 E题||hdu 5001 概率dp
- hdu5001 鞍山赛区网络赛 E题
- js 时间格式转换 格林威治时间
- 不要做一个浮躁的程序员
- 100款免费的旅游素材(PSD)
- error C2338
- 什么是FC?如何避免FC的发生,另外FC发生时如何捕获相应的uncaught exception?
- 2014鞍山现场赛D题 E题||hdu5073、5074
- is not writable or has an invalid setter method错误
- 项目三:输出星号图(a)(b)
- Android SDK无法下载,ADT官网无法打开解决方法
- Android开发(25) 如何解决Attribute "XXX" has already been defined
- 第九周项目三(b图)
- 第九周项目三(一)
- 隐马尔可夫模型(HMM)简介
- Android 指定销毁一个Activity