奇怪思路求助

P1311 [NOIP2011 提高组] 选择客栈

补一下注释版 ```cpp #include<iostream> #include<cstdio> #define INF 200005 using namespace std; int n,k,p;//如题 int col[55],c[INF];//col色调 c价格 int sum[55];//sum某色调的方案数 int ans=0;//答案 bool f[55];//判断色调是否重复出现 int main() { //freopen("kd.txt","r",stdin); scanf("%d%d%d",&n,&k,&p); for(int i=1;i<=n;i++) { scanf("%d%d",&col[i],&c[i]); if(!f[col[i]])//判断某个色调是否第二次出现 f[col[i]]=1; else { bool pd=0;//pd是判断的音译 pd==1 ->说明方案向前找到的第一个可以和它构成方案 pd==0 ->说明不能 for(int j=i;j>=0;j--) { if(c[j]<=p)//找是否存在可以形成方案的情况 { pd=1; break; } if(col[j]==col[i]&&i!=j)//如果找到了色调相等的说明无法形成方案 break;// } if(pd)//如上pd的含义 sum[col[i]]=sum[col[i]]*2+1; else sum[col[i]]=sum[col[i]]*2; } } for(int i=0;i<k;i++) ans+=sum[i];//统计 printf("%d",ans); return 0; } /* 5 2 10 0 11 1 5 0 12 0 6 1 11 */ ```
by wtt907 @ 2021-09-30 15:34:14


|