以上题解的找规律的代码全是错误的,别被误导,看懂我的思路。
参考代码:
#include using namespace std; int main() { int t; cin>>t; for(int i=0;i>n; if(n%2==0) { cout<<4<<endl;continue;//只可能是4; } if(n%3==0) { cout<<6<<endl;continue;//n是3的倍数时,全是6,不妨自己验证一遍。 } int minv=999999; for(int j=n/2+1;j<n;j++)//先取第一个方砖,从n/2+1开始,因为当j<=n/2明显还可以4块拼成一大块,这些情况不需要验证,肯定不合理。 { bool a[101][101]={0};//标记已经覆盖的位置 for(int k=1;k<=j;k++) { for(int l=1;l<=j;l++) { a[k][l]=1;//第一块大方砖覆盖的位置 } } int tot=1;//已经用了一块方砖 while(1)//循环不断贪心求出最大面积的可用方砖,并使用。 { int dp[101][101]={0},maxv=0,x=1,y=1,cnt=0;//dp是用来求整个范围内的最大可用面积。 for(int k=1;k<=n;k++) { for(int l=1;l<=n;l++) { if(a[k][l]==1)//该点的可用面积为0; { dp[k][l]=0;cnt++; } else { int minu=dp[k-1][l]<dp[k][l-1]?dp[k-1][l]:dp[k][l-1]; minu=minumaxv) { maxv=dp[k][l];//求出最大可用面积并记录。 x=k;y=l; } } } } if(cnt==n*n)break;//如果所有的都被覆盖了,则退出循环。 for(int k=x-maxv+1;k<=x;k++) { for(int l=y-maxv+1;l<=y;l++) { a[k][l]=1;//使用目前最大面积的方砖。 } } tot++;//方砖使用数量+1 } if(tot<minv)minv=tot;//求出最小的使用方砖数量 } cout<<minv<<endl; } return 0; }
注意事项:详见代码
希望能帮助大家解决问题,若有错误,请指出。
0.0分
7 人评分
母牛的故事 (C语言代码)浏览:1408 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:590 |
永远的丰碑 (C语言代码)浏览:698 |
模拟计算器 (C语言代码)浏览:966 |
【明明的随机数】 (C++代码)浏览:834 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:940 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:565 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:895 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:701 |
printf基础练习2 (C语言代码)浏览:796 |