张掖哪家公司做网站,建设银行预约纪念钞网站,云南省城乡和住房建设厅网站,商城网站建设可以吗题意#xff1a;桌子上有4 堆糖果#xff0c;要从这四堆糖果中取出5个#xff0c;如果5个中有相同的颜色则把他们拿出来放到口袋#xff0c;求最多放多少糖果。 思路#xff1a;DAG最长路问题。需要把问题转化成DAG的问题#xff0c;以个数作为转移的状态#xff0c;当达…题意桌子上有4 堆糖果要从这四堆糖果中取出5个如果5个中有相同的颜色则把他们拿出来放到口袋求最多放多少糖果。 思路DAG最长路问题。需要把问题转化成DAG的问题以个数作为转移的状态当达到5的时候为0否则就是选当前的和不选当前的最大值。 code #include bits/stdc.h
using namespace std;using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;const int N1000000;
const int M45;
const int mod1000000007;
const double piacos(-1.0);#define cls(x,c) memset(x,c,sizeof(x))
#define ft(i,s,t) for (int is;it;i)int n;
int vis[M],dp[M][M][M][M],tq[M];
int g[M][M];int sol(int ct)
{int ansdp[tq[0]][tq[1]][tq[2]][tq[3]];if (ans!-1) return ans;if (ct5) return ans0;ans0;ft(i,0,3){if (tq[i]n) continue;int clg[i][tq[i]];tq[i];if (vis[cl]){vis[cl]0;ansmax(ans,sol(ct-1)1);vis[cl]1;}else{vis[cl]1;ansmax(ans,sol(ct1));vis[cl]0;}tq[i]--;}return ans;
}
int main()
{while (~scanf(%d,n),n){ft(i,0,n-1) ft(j,0,3) scanf(%d,g[j][i]);cls(tq,0);cls(vis,0);cls(dp,-1);printf(%d\n,sol(0));}
}