包括计算几何、特殊数据结构、组合数学等知识点的代码。每个代码对应一道ACM试题

源代码在线查看: pku 3413 rpg的任务和经验问题.txt

软件大小: 152 K
上传用户: tanghui2008
关键词: ACM 代码 计算 几何
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include 
				#include 
				#include 
				#include 
				#include 
				#include 
				#include 
				using namespace std;
				
				//PKU 3413 RPG的任务和经验问题
				//#define NMAX 
				//#define INFI 
				#define PI 3.1415926
				#define MH make_heap
				#define OH pop_heap
				#define PH push_heap
				#define PB push_back
				#define OB pop_back
				#define NMAX 12
				
				bool visited[NMAX];
				int num;
				double a[NMAX];
				double b[NMAX];
				double s[NMAX];
				double ans;
				int xulie[NMAX];
				int tempxu[NMAX];
				
				double gailv(double aa,double bb,double xp)
				{
				    if(xp				    else if(xp>=bb) return 1.00;
				    else return (xp-aa)/(bb-aa);
				}
				
				void search(int i,double xp,double gv,int count)
				{
				    int j;
				    count++;
				 visited[i]=true;
				 tempxu[count]=i;
				// printf("count=%d i=%d xp=%.3f \n",count,i,xp);
				//  for(j=1;j				//  printf("\n");
				 if(count==num && ans				 {
				     ans=gv*gailv(a[i],b[i],xp);
				 //   printf("go ");
				 //    printf("ans=%.3f   ",ans);
				     for(j=1;j				     {xulie[j]=tempxu[j];
				 //    printf(" %d",tempxu[j]);
				     }
				 //        printf("\n");
				     return;
				 }
				 gv=gv*gailv(a[i],b[i],xp);
				 xp+=s[i];
				// printf("next gv=%.3f xp=%.3f\n",gv,xp);
				 for(j=1;j				 {
				     if(visited[j]==false && gv*gailv(a[j],b[j],xp)>ans)
				     {
				        search(j,xp,gv,count);
				       visited[j]=false;      
				     }
				 }
				}
				
				void solve(double xp)
				{
				    int i;
				    ans=0.0;
				    for(i=1;i				    {
				        visited[i]=false;
				        xulie[i]=i;
				    } 
				    for(i=1;i				    {
				        if(xp>a[i])
				        {
				            search(i,xp,1.00,0);
				            visited[i]=false;
				        }
				    }
				    printf("%.3f\n",ans);
				    for(i=1;i				    printf("\n");
				}
				
				int main()
				{
				    int i;
				    double xp;
				    scanf("%d %lf",&num,&xp);
				    for(i=1;i				    {
				        scanf("%lf %lf %lf",&a[i],&b[i],&s[i]);
				    }
				    solve(xp);
				}
				
							

相关资源