bnuoj 20838 Item-Based Recommendation (模拟)

http://www.bnuoj.com/bnuoj/problem_show.php?pid=20838

【题意】:

  有点长,略。

【code】:

  

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string>
 4 #include <string.h>
 5 #include <math.h>
 6 #include <algorithm>
 7 
 8 using namespace std;
 9 
10 double rat[220][220];
11 double drat[220][220];
12 
13 struct Nod
14 {
15     int id;
16     double rt;
17 }node[220];
18 
19 int m,n;
20 
21 bool cmp(Nod a,Nod b)
22 {
23     return a.rt>b.rt;
24 }
25 
26 double getAns(int a,int b)
27 {
28     int i;
29     double sum=0;
30     for(i=1;i<=n;i++)
31     {
32         if(rat[i][a]>0&&rat[i][b]>0)
33         {
34             sum+=(rat[i][a]-rat[i][b])*(rat[i][a]-rat[i][b]);
35         }
36     }
37     return 1.0/(sum+1);
38 }
39 
40 void getDrat()
41 {
42     int i,j;
43     for(i=1;i<=m;i++)
44     {
45         drat[i][i]=1;
46         for(j=i+1;j<=m;j++)
47         {
48             drat[i][j]=drat[j][i]=getAns(i,j);
49         }
50     }
51 }
52 
53 int main()
54 {
55     int c;
56     scanf("%d%d%d",&n,&m,&c);
57     memset(rat,0,sizeof(rat));
58     while(c--)
59     {
60         int a,b;
61         scanf("%d%d",&a,&b);
62         scanf("%lf",&rat[a][b]);
63     }
64     getDrat();
65     int x;
66     while(~scanf("%d",&x))
67     {
68         printf("Recommendations for user %d:\n",x);
69         int i,cnt=0,j;
70         double down=0,up=0;
71         for(i=1;i<=m;i++)
72         {
73             if(rat[x][i]==0)//i=6
74             {
75                 down=0,up=0;
76                 for(j=1;j<=m;j++)
77                 {
78                     if(rat[x][j]>0)
79                     {
80                         down+=drat[i][j];
81                         up+=drat[i][j]*rat[x][j];
82                     }
83                 }
84                 node[cnt].id = i;
85                 node[cnt].rt = up/down;
86                 cnt++;
87             }
88         }
89         sort(node,node+cnt,cmp);
90         for(i=0;i<cnt&&i<10;i++)
91         {
92             printf("%d %.3lf\n",node[i].id,node[i].rt);
93         }
94         putchar(10);
95     }
96     return 0;
97 }

 

posted @ 2013-09-23 17:43  crazy_apple  阅读(211)  评论(0编辑  收藏  举报