Guess UVA - 1612
Posted 被咬过的馒头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guess UVA - 1612相关的知识,希望对你有一定的参考价值。
这题题目很简单,但是卡了一下精度,因为题目说精确小数点两位
首先要把出入×100然后要用round函数四舍五入,才能去除精度问题
#include<stdio.h> #include<iostream> #include<map> #include<queue> #include<math.h> #include<algorithm> using namespace std; #define MST(vis,x) memset(vis,x,sizeof(vis)) #define ll long long #define maxn 17000 int s1[maxn][5]; int s2[maxn]; int main() { int n,i=1; double dd; // FILE *fp; // fp=fopen("D://wendang//tutu.txt","a"); while(scanf("%d",&n)&&n) { for(int a=1; a<=n; a++) for(int b=1; b<=3; b++) { scanf("%lf",&dd); s1[a][b]=(int)round(dd*100.0); } int x,flag=0; int temp; for(int a=1; a<=n; a++)scanf("%d",&s2[a]); for(int a=1; a<=n; a++) { x=s2[a]; if(a==1)temp=s1[x][1]+s1[x][2]+s1[x][3]; else { if(s2[a-1]<s2[a]) { int tt=-1; if(0<=temp) tt=max(tt,0); if(s1[x][1]<=temp) tt=max(tt,s1[x][1]); if(s1[x][2]<=temp) tt=max(tt,s1[x][2]); if(s1[x][3]<=temp) tt=max(tt,s1[x][3]); if(s1[x][1]+s1[x][2]<=temp) tt=max(tt,s1[x][1]+s1[x][2]); if(s1[x][1]+s1[x][3]<=temp) tt=max(tt,s1[x][1]+s1[x][3]); if(s1[x][2]+s1[x][3]<=temp) tt=max(tt,s1[x][2]+s1[x][3]); if(s1[x][1]+s1[x][2]+s1[x][3]<=temp) tt=max(tt,s1[x][1]+s1[x][2]+s1[x][3]); if(tt<0) { flag=1; break; } temp=tt; } else { int tt=-1; if(0<temp) tt=max(tt,0); if(s1[x][1]<temp) tt=max(tt,s1[x][1]); if(s1[x][2]<temp) tt=max(tt,s1[x][2]); if(s1[x][3]<temp) tt=max(tt,s1[x][3]); if(s1[x][1]+s1[x][2]<temp) tt=max(tt,s1[x][1]+s1[x][2]); if(s1[x][1]+s1[x][3]<temp) tt=max(tt,s1[x][1]+s1[x][3]); if(s1[x][2]+s1[x][3]<temp) tt=max(tt,s1[x][2]+s1[x][3]); if(s1[x][1]+s1[x][2]+s1[x][3]<temp) tt=max(tt,s1[x][1]+s1[x][2]+s1[x][3]); if(tt<0) { flag=1; break; } temp=tt; } } } if(flag==1) printf("Case %d: No solution\n",i++); else { double temptemp=temp*1.0/100; printf("Case %d: %.2f\n",i++,temptemp); } } return 0; }
以上是关于Guess UVA - 1612的主要内容,如果未能解决你的问题,请参考以下文章