标签:clu pac 表示 其他 lag 最大 问题 for turn
题意:
有n个问题。
给出你解决完第i个问题之后解决j问题所花的时间,花的时间越多表示难度越大,每次只能解决难度大于或等于上个题难度的问题。问你最多能解决多少问题。
他妈的,第一次做想半天想不出来如何设计递归函数。真是考验智商...
不过最后还是看了别人题解之后才顿悟
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int flag[10001];
int mmap[1001][1001];
int sum=0;
int n;
void dps(int i,int lasttime,int k) //i表示已经解决完了问题i,该解决其他问题了,lasttime表示解决上一次问题的时间,k表示已经解决了多少问题。
{
if(flag[i]) //如果该问题已被解决返回
{
return;
}
sum=max(k,sum); //获取最大解题数量
for(int jj=0;jj<n;jj++)
{
if(mmap[i][jj]>=lasttime)
{
flag[i]=1; //标记该问题已被解决
dps(jj,mmap[i][jj],k+1);
flag[i]=0; //回溯的时候把标记置0
}
}
}
int main()
{
while(cin>>n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>mmap[i][j];
}
}
sum=0;
dps(0,0,1);
cout<<sum<<endl;
}
return 0;
}
标签:clu pac 表示 其他 lag 最大 问题 for turn
原文地址:http://www.cnblogs.com/f-society/p/6732811.html