這題明顯要用狀壓。
設f[i][j]表示走到第i個點,然後賣掉的鑽石的二進位制狀態為j。
直接暴力用dfs和bfs來做可以對60分,bfs的用spfa來做。
那麼f[i][j]=max(f[i][j],f[k][j|er[p-1]]-chang[i]+a[j][p])這是自己走別的點的情況,自己走自己的情況也類似。
但是把二進位制放進去的冗餘情況較多,因為乙個二進位制情況可以轉化成很多個二進位制情況。
我們考慮一下有沒有二進位制轉移只轉移一位的情況。
我們考慮列舉二進位制狀態z,然後求出所有點只賣這些鑽石,的最長路。
設d[i]為當前狀態z是的最短路(就是不買鑽石然後更新別的值)。
然後用d值把f[i][z]的值向後多推一位。
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fod(i,a,b) for(i=a;i>=b;i--)
#define rep(i,a) for(i=first[a];i;i=next[i])
using namespace std;
const int maxn=1507;
int i,j,k,l,t,n,m,ans,s,x,y,z,p,q;
int a[maxn][maxn];
int first[4007],next[4007],last[4007],num,chang[4007],da;
int f[1507][1507],er[11],cnt,b[1507][11];
int data[maxn*200],d[maxn];
bool bz[maxn],az;
void add(int
x,int
y,int z)
void spfa(int zhi)}}
bz[x]=0;
}fo(i,1,m)
}int main()
noip2014 螺旋矩陣 (模擬)
p1913螺旋矩陣 accepted 標籤 noip普及組2014 乙個 n 行 n 列的螺旋矩陣可由如下方法生成 從矩陣的左上角 第 1 行第 1 列 出發,初始時向右移動 如果前方是未曾經過的格仔,則繼續前進,否則右轉 重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中 依次填入 1,2...
NOIP2014模擬11 3 蛋糕
今天是bessie的生日,他買了乙個蛋糕和朋友們一起分享,蛋糕可以看成是乙個r行c列的 共有r c個格仔,每個格仔都有乙個0至9的數字,表示該格仔蛋糕擁有的巧克力。現在bessie要把蛋糕橫的切3刀再豎的切3刀,由於bessie刀法厲害,所以每個格仔蛋糕都是完整的,顯然蛋糕會被切成16份,然後bes...
NOIP2014 比例簡化 模擬
輸入檔案 ratio.in輸出檔案 ratio.out簡單對比 時間限制 1 s 記憶體限制 256 mb 在社交 上,經常會看到針對某乙個觀點同意與否的民意調查以及結果。例如,對某一觀點表示支援的有1498人,反對的有902人,那麼贊同與反對的比例可以簡單的記為1498 902。不過,如果把調查結...