摘要:
完了不会dp了 设f[i][j]为以i结尾,有j个时的最优值,辅助数组g[i][j]为s选了i和j,i~j中的误差值 转移是f[j][i]=min(f[k][i 1]+g[k][j]) cpp include include include using namespace std; const lo 阅读全文
摘要:
废了废了,一个小dp都想不出来 把c数组倒序一下,变成1在最下,设f[i][j]为某一人取完j个之后还剩1~i的硬币,转移的话应该是f[i][j]=max(s[i] f[i k][k]),就是1~n的硬币价值和减去上一手能拿到的最大值,但是这样一来就是O(n^3)的了 仔细观察发现f[i][j]和f 阅读全文
摘要:
参考:https://blog.csdn.net/u012288458/article/details/50830498 有点神啊 正难则反,考虑计算不符合要求的三角形。具体方法是枚举每个点,把这个点和(0,0)连线,然后连线左边的点两两组合和连线右边的点两两组合再和当前枚举的点组成三角形都是不符合 阅读全文
摘要:
和poj 2409差不多,就是k变成3了,详见 还有不一样的地方是记得特判n==0的情况不然会RE cpp include include using namespace std; long long n,ans; long long ksm(long long a,long long b) { l 阅读全文
摘要:
根据polya定理,答案应该是 $$ \frac{1}{n}\sum_{i=1}^{n}n^{gcd(i,n)} $$ 但是这个显然不能直接求,因为n是1e9级别的,所以推一波式子: $$ \frac{1}{n}\sum_{i=1}^{n}n^{gcd(i,n)} $$ $$ =\frac{1}{n 阅读全文
摘要:
两种置换 旋转:有n种,分别是旋转1个2个……n个,旋转i的循环节数位gcd(i,n) 翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1;对于偶数个,有珠子对珠子和边对边,循环节个数为n/2+1个和n/2个 然后用polya定理 即可 cpp include include 阅读全文