标签:+= 长度 应该 占用 else 问题 随机数 code max
其实是一道区间DP题.......应该并不难。就是DP做少了? 莫名不会。实际上仔细想一想就明白了。直接枚举分段点进行计算就可以了。
for(int l = 1, r = x; r < n2; ++l, ++r)
{
for(int k = l; k < r; ++k)
{
f[l][r] = max_(f[l][r], f[l][k] + f[k + 1][r] + num[l] * num[r + 1] * num[k + 1]);
}
if(x == n) ans = max_(ans, f[l][r]);
}
这虫子怕是广东来的
大法师完美解决。但必须要有剪枝。不然肯定会超。
1.根据竖式确定先出现的字母先枚举情况。
2.根据两个加数直接确定和上的数字。最后判断是否可行。
只要有这两个就没有问题了。
IL bool prune (int t)
{//已知a,b,c 三字母都已填数 那么 判断(a+b)%n=c (a+b+1)%n=c都不成立 已知a,b,c三者其中2个求得第3个已经被占用
for (int i=n-1; i>=0; --i)
{
if (x[a[i]] != -1 && x[b[i]] != -1 && x[c[i]] != -1)
{
if ((x[a[i]] + x[b[i]]) % n != x[c[i]] &&
(x[a[i]] + x[b[i]] + 1) % n != x[c[i]])
return 1;
else
{
if(x[a[i]] != -1 && x[b[i]] != -1 && x[c[i]] == -1)
if (y[(x[a[i]]+x[b[i]])%n] && y[(x[a[i]]+x[b[i]]+1)%n])
return 1;
if (x[a[i]] != -1 && x[b[i]] == -1 && x[c[i]] != -1)
if (y[(x[c[i]]-x[a[i]]+n)%n] && y[(x[c[i]]-x[a[i]]+1+n)%n])//b1=(c-a+n)%n b2=(c-a-1+n)%n
return 1;
if (x[a[i]] == -1 && x[b[i]] != -1 && x[c[i]] != -1)
if (y[(x[c[i]]-x[b[i]]+n)%n] && y[(x[c[i]]-x[b[i]]+n-1)%n])//a1=(c-b+n)%n a2=(c-b-1+n)%n
return 1;
}
}
}
return 0;
}
过河最致命的就是长度\(10^9\)然后又是一个明显的DP题目。怎么都会爆........所以肯定要想办法缩短路程
不知道为什么就取了1-10的最小公倍数来压缩了。
压缩了之后就会非常友好
for (int i=1;i<=l+t;i++)
for (int j=s;j<=t;j++)
{
if (i-j>=0)
f[i]=min(f[i],f[i-j]);
f[i]+=stone[i];
}
觉得难就跳过了。实际理解一下题目......考试的时候看不懂事后诸葛亮........但是现在至少会做了
就是找最大值......
然后?然后没了
考试的时候思考了一下。随机值带入验证。
因为输入数据少,多验证一下就很可以了。
奈何不会随机数
其实这么做就不难了
标签:+= 长度 应该 占用 else 问题 随机数 code max
原文地址:https://www.cnblogs.com/rendex/p/9748359.html