首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [向all提问]散分散分~~~
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Pure_Milk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-08 15:48:04 楼主
    C/C++ code
    一个n*n的数字矩阵,在当中选出n个格子,任意两个均不同行不同列, 要求选出的那n个数的和要最大,如5*51 2 3 4 5 2 5 4 1 4 6 1 4 5 0 10 2 1 1 3 5 6 9 1 1 最大的和是34 (5+5+5+10+9

    这个要怎么做?


    欢迎C/C++爱好者加入QQ群1247992
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • redleaves
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:49:001楼 得分:0
    沙发有多少分?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:49:482楼 得分:0
    貌视N皇后问题.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zmlovelx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:50:183楼 得分:0
    应该是
    5+5+6+10+9吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zmlovelx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:51:194楼 得分:0
    哦 我看错了. 任意两个均不同行不同列
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • macfan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:53:295楼 得分:0
    应该是用动态规划算法,楼主去看看动态规划。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangguilin
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 15:56:126楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sevenhu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 16:10:067楼 得分:0
    够复杂。不懂帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lzr4304061988012
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 16:35:568楼 得分:0
    C/C++ code
    //用N皇后改的,很勉强. #include <iostream> #include <string.h> using namespace std; const int N=5; int matrix[N][N]={1, 2, 3, 4, 5, 2, 5, 4, 1, 4, 6, 1, 4, 5, 0, 10, 2, 1, 1, 3, 5, 6, 9, 1, 1, }; int max_sum; int max_array[N]; bool is_right_pos(int * row_matrix,int row,int column) { for(int k=0;k<row;k++) if(column==row_matrix[k]) return false; return true; } void Trail(int i,int *b) { static bool isfirst=true; if(i==N) { int sum=0; int k=0; for(;k<N;k++) sum+=matrix[k][b[k]]; if(isfirst) { max_sum=sum; isfirst=false; } else { if(max_sum<sum) { max_sum=sum; memcpy(max_array,b,sizeof(int)*N); } } } else { for(int j=0;j<N;j++) if(is_right_pos(b,i,j)) { b[i]=j; Trail(i+1,b); } } } void main() { int row_matrix[N]; Trail(0,row_matrix); cout<<"the max sum array is:"; for(int i=0;i<N;i++) cout<<matrix[i][max_array[i]]<<" "; cout<<"the max sum is:"<<max_sum<<endl; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • backway
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 16:38:009楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuyu637
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 16:39:4310楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chuchuzinnia
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:03:5911楼 得分:0
    C/C++ code
    #include <stdio.h> #include <stdlib.h> #define M 100 #define N 100 int main(){ int a[N][M],i,j,n,m; int sum=0,max; printf("input n and m:"); scanf("%d",&n); scanf("%d",&m); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]); j=0; for(i=0;i<n;i++) { max=a[i][j]; for(j=0;j<m;j++) { if(a[i][j]>max) max=a[i][j]; } sum+=max; } sum=sum/m; printf("%d",sum); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anybbs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:05:1712楼 得分:0
    用递归可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anybbs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:11:1413楼 得分:0
    今天没时间,改天给你写个


    ===================================
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fenghuijun135
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:20:2814楼 得分:0
    学习中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Pure_Milk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:21:3415楼 得分:0
    11楼的程序不对吧??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ecchi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:44:4316楼 得分:0
    n比较小的话可以直接搜索.
    比较大的话可以建N行对应N列的二部图求最大权匹配. 不过我自己不会写-.-
    不厚道的引用一下别人的代码
    引用地址: http://topic.csdn.net/t/20050223/21/3801741.html
    你这输入基本上也一模一样的格式, 就是要先输入n.
    也就是
    5
    1  2  3  4  5
    2  5  4  1  4
    6  1  4  5  0
    10 2  1  1  3
    5  6  9  1  1

    结果就是你说的34
    我自己也研究下代码...

    C/C++ code
    #include <iostream> #include <iomanip> #include <fstream> #include <cstdio> #include <memory> using namespace std; const int Max=50; bool T[Max],R[Max],visited[Max]; int U[Max],V[Max],gt[Max][Max],x[Max],y[Max]; int N; int path(int u) { int v; for(v=0;v<N;v++) { if(U[u]+V[v]-gt[u][v]==0 && !visited[v]) { visited[v]=1; if(y[v]<0 || path(y[v])) { x[u]=v;y[v]=u; R[u]=1;T[v]=0; return 1; }else{ T[v]=1; R[y[v]]=0; } } } return 0; } int main() { // freopen("1.in","r",stdin); int i,j,ans,sigma,step=0; while(scanf("%d", &N) != EOF){ for(i=0;i<N;i++) { U[i]=V[i]=0; for(j=0;j<N;j++) { scanf("%d", &gt[i][j]); if(U[i]<gt[i][j])U[i]=gt[i][j]; } } ////////////////////////////////////////////////////////// for(;;) { ans=0; sigma=0; memset(x,-1,sizeof(x)); memset(y,-1,sizeof(y)); memset(R,0,sizeof(R)); memset(T,0,sizeof(T)); for(i=0;i<N;i++) { if(x[i]<0) { memset(visited,0,sizeof(visited)); ans+=path(i); } } for(i=0;i<N;i++) { if(!R[i]) for(j=0;j<N;j++) { if(!T[j] && (sigma<1 || sigma>U[i]+V[j]-gt[i][j] && U[i]+V[j]-gt[i][j]>0)) sigma=U[i]+V[j]-gt[i][j]; } } if(ans>=N) break; for(i=0;i<N;i++) { if(!R[i]) U[i]-=sigma; if(T[i]) V[i]+=sigma; } } ///////////////////////////////////////////////////////// ans=0; for(i=0;i<N;i++) { ans+=U[i]+V[x[i]]; } printf("%d\n", ans); } return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Pure_Milk
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 17:47:3417楼 得分:0
    楼上不厚道。。。。这么快就说答案。。。。

    哇~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ecchi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 18:00:4318楼 得分:0
    题目太经典...二部图的模型比较容易想到.
    这题好像应该发算法版@_@
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cllggg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 19:54:5519楼 得分:0
    递归
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 20:00:4920楼 得分:0
    up~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • elegant87
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 20:01:3321楼 得分:0
    JF
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cxxer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 20:03:1922楼 得分:0
    JF
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lizhengc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-08 20:08:0423楼 得分:0
    呵呵