切钢管的题目,用一个3重循环找最优...可以用
四边形不等式优化到O(n*n)
这题用搜索和位压缩,具体的可以参见某人的blog
http://drizzlecrj.cnblogs.com/
他那边写得比较好^_^
排列组合问题,通过计算每人的上面和右上以及右边的人的情况来算 杨氏图表
模拟
稍微推下就出来啦
这题好,我喜欢,^_^
博弈,哈哈,这题大概的思路是这样的:
首先统计各堆石子%3的结果,然后如果是最后取的是输的这种情况,首先判断%3以后是不是全是0的情况,如果是,那就必胜(因为所有%3为0的情况都可以设法保证用偶数次取完),在除了这种情况下面,%为0的堆数对胜负不产生影响,在余下的情况下,只要异或1和2的情况,或者统计1和2的情况的个数是不是都是偶数,来判断胜负;对于最后取赢的情况,同样先看是不是全是0的情况,然后看是不是去掉所有的0以后剩下的是不是全是1的情况,如果是,根据1的个数判断胜负,否则,继续异或1和2的情况,或者统计1和2的情况的个数是不是都是偶数,来判断胜负^_^,my code:
#include <stdio.h>
int main()
{ int a[10001];
int n,f,i,flag;
int x,y,z;
while(scanf("%d",&n)==1)
{x=0,y=0,z=0,flag=0;//1 win,0 lose
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&f);
for(i=0;i<n;i++)
{if(a[i]%3==0) x++;
if(a[i]%3==1) y++;
if(a[i]%3==2) z++;
}
if(f==0)
{
if(x==n) {flag=1;break;}
else if(y%2==0&&z%2==0)flag=0;
else flag=1;
}
else
{
if(x==n) flag=0;
else if(y==n-x)
{
if(y%2==0) flag=1;
else flag=0;
}
else if(y%2==0&&z%2==0)flag=0;
else flag=1;
}
if(flag==1) printf("yes\n");
else printf("no\n");
}
return 0;
}