hdu 1565 状态压缩dp
来源:互联网 发布:网络情歌对唱 编辑:程序博客网 时间:2024/05/17 01:09
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int dp[20][5000],num,A[5000],mark[25][5000],n,map[25][25];
int max(int a,int b)
{
return a>b?a:b;
}
int first()
{
num=0;
int a,j,i;
for(i=0;i<(1<<n);i++)
{
if(i&(i<<1)) continue;
A[num++]=i;
if(i==0) continue;
a=i;
j=n;
while(a/2)
{
if(a%2)
{
for(int k=1;k<=n;k++)
mark[k][num-1]+=map[k][j];
}
a/=2;
j--;
}
for(int k=1;k<=n;k++)
mark[k][num-1]+=map[k][j];
}
return 0;
}
int main()
{
int i,j,a;
while(~scanf("%d",&n))
{
memset(A,0,sizeof(A));
memset(mark,0,sizeof(mark));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
first();
//for(i=0;i<num;i++)
//printf("%d ",A[i]);
//printf("%\n");
memset(dp,0,sizeof(dp));
for(i=0;i<num;i++)
{
//int t=A[i];
//printf("%d ",t);
//printf("%d\n",mark[1][t]);
dp[1][i]=mark[1][i];
}
for(i=2;i<=n;i++)
{
for(j=0;j<num;j++)
{
for(int k=0;k<num;k++)
{
if(A[j]&A[k]) continue;
dp[i][k]=max(dp[i][k],dp[i-1][j]+mark[i][k]);
}
}
}
int Max=0;
for(i=0;i<num;i++)
if(dp[n][i]>Max) Max=dp[n][i];
printf("%d\n",Max);
}
return 0;
}
#include<string.h>
#include<iostream>
using namespace std;
int dp[20][5000],num,A[5000],mark[25][5000],n,map[25][25];
int max(int a,int b)
{
return a>b?a:b;
}
int first()
{
num=0;
int a,j,i;
for(i=0;i<(1<<n);i++)
{
if(i&(i<<1)) continue;
A[num++]=i;
if(i==0) continue;
a=i;
j=n;
while(a/2)
{
if(a%2)
{
for(int k=1;k<=n;k++)
mark[k][num-1]+=map[k][j];
}
a/=2;
j--;
}
for(int k=1;k<=n;k++)
mark[k][num-1]+=map[k][j];
}
return 0;
}
int main()
{
int i,j,a;
while(~scanf("%d",&n))
{
memset(A,0,sizeof(A));
memset(mark,0,sizeof(mark));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]);
first();
//for(i=0;i<num;i++)
//printf("%d ",A[i]);
//printf("%\n");
memset(dp,0,sizeof(dp));
for(i=0;i<num;i++)
{
//int t=A[i];
//printf("%d ",t);
//printf("%d\n",mark[1][t]);
dp[1][i]=mark[1][i];
}
for(i=2;i<=n;i++)
{
for(j=0;j<num;j++)
{
for(int k=0;k<num;k++)
{
if(A[j]&A[k]) continue;
dp[i][k]=max(dp[i][k],dp[i-1][j]+mark[i][k]);
}
}
}
int Max=0;
for(i=0;i<num;i++)
if(dp[n][i]>Max) Max=dp[n][i];
printf("%d\n",Max);
}
return 0;
}
0 0
- hdu 1565 状态压缩 dp
- hdu 1565 状态压缩dp
- hdu 1565 状态压缩DP
- hdu 1565 状态压缩dp
- 【状态压缩dp】HDU
- hdu(3920)状态压缩+dp
- HDU 1074 状态压缩DP
- HDU 4049 状态压缩DP
- 【状态压缩DP】HDU 2167
- HDU 1074 状态压缩dp
- HDU 1074 (状态压缩DP)
- HDU 3362 (状态压缩DP)
- hdu 4539 状态压缩DP
- hdu 3182 状态压缩DP
- Hdu 3811 状态压缩 DP
- hdu 2167 状态压缩DP
- hdu 4539 状态压缩DP
- hdu 1074 状态压缩dp
- Android判断apk是否存在
- Eclipse使用hibernate插件
- 【遇见Android bug】android R 文件生成不了
- teamviewer vpn 内网
- SEO的几个优势
- hdu 1565 状态压缩dp
- 改善C#程序的50种方法
- Unity3D - AssetBundle 在Android机子上进行读取
- 怎么样才是好的程序员
- css3动画事件
- sql 多个字段分组查询语句
- 手机恢复出厂设置文件怎么恢复
- itellij 开发android,部分配置问题
- 随想(一)