日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

状态压缩 HDU 1565

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 状态压缩 HDU 1565 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多組數據

給你一個n*n的矩陣

不能相鄰的取數 上下左右

求最大的和

#include<stdio.h> #include<algorithm> #include<string.h>using namespace std;int n; int z[30][30]; int dp[2][1<<20+1],cnt; //dp和滾動數組差不多 推出的行只有相鄰的有關系 int num[20000]; //用來記錄 合法的狀態 就是同行要不相鄰int main() {cnt=0;for(int i=0;i<(1<<20);i++)if((i&(i<<1))==0)num[cnt++]=i;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%d",&z[i][j]);memset(dp,0,sizeof(dp));int len=(1<<n);for(int i=0;i<n;i++){int p=i&1; //奇數偶數for(int j=0;j<cnt;j++){if(num[j]>=len)break;int sum=0;for(int k=0;k<n;k++) //和這個狀態都是1 可以取{if((num[j]&(1<<k)))sum+=z[i][k];}int m1=0;for(int k=0;k<cnt;k++){if(num[j]>=len)break;if(!(num[j]&num[k])) //上面最大的合法的狀態轉移過來m1=max(m1,dp[1-p][num[k]]);}dp[p][num[j]]=sum+m1; //本行加上面的}}int p=(n-1)&1; //最后奇偶int ans=0;for(int i=0;i<len;i++) //最大的狀態ans=max(dp[p][i],ans);printf("%d\n",ans);}return 0; }

?

轉載于:https://www.cnblogs.com/cherryMJY/p/6128743.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的状态压缩 HDU 1565的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。