nasa食物問題
這是一道資料量比較小的01揹包
01揹包剛入門所以我只會背公式……背的還是錯的
揹包第一次**:30分(好傢伙,原地去世)
//p1507 nasa食物計畫
#include
#include
#include
using
namespace std;
int v,m;
int n;
struct foodf[55]
;int dp[55]
[400][
400]=;
int ans=0;
intmain()
for(
int i=
1;i<=n;i++)}
}}//printf("答案\n");
printf
("%d\n"
,ans)
;return0;
}
後來改用稍微熟悉一點的dfs,居然過了~~
//dfs:nasa食物計畫
#include
#include
#include
#include
struct foodf[50]
;int v,m;
int n;
int ans;
void
dfs(
int id,
int nv,
int nm,
int nc)
//購買id件物品
if(nv+f[id]
.v<=v&&nm+f[id]
.m<=m)
dfs(id+
1,nv+f[id]
.v,nm+f[id]
.m,nc+f[id]
.c);
}//不買
dfs(id+
1,nv,nm,nc);}
intmain()
dfs(0,
0,0,
0);printf
("%d\n"
,ans)
;}
不開玩笑了,揹包還是得會的……
//p1507 nasa食物計畫
#include
#include
#include
using
namespace std;
int v,m;
int n;
//常見的01揹包公式:f[j]=maxf[55]
;int dp[
400]
[400]=
;int ans=0;
intmain()
for(
int i=
1;i<=n;i++)}
}}//printf("答案\n");
printf
("%d\n"
,ans)
;return0;
}
開心的金明
這題資料量也不大,但是dfs死迴圈了,懶得改……好吧,沒找到邏輯bug
但是揹包公式可以套用就……爽翻啦!
看看,這簡潔的介面~~
//開心的金明
#include
#include
#include
using
namespace std;
int n,m;
struct thingt[30]
;//dfs不靠譜
int dp[
30000]=
;//下標表示錢數
int ans=0;
intmain()
for(
int i=
0;iprintf
("%d\n"
,ans)
;return0;
}
通天之分組揹包
這題我一開始的理解,覺得樣例是錯的……
一開始的思路是:盡可能裝一種id的物品,使得價值最大化
啊,懷疑樣例的都是蠢貨
40分:
//通天之分組揹包
#include
#include
#include
using
namespace std;
struct bagbag[
1001];
int n,w;
bool
cmp(bag a,bag b)
int dp[
1001][
1001];
intmain()
//對每個組分別用01揹包
int ans=0;
for(
int i=
0;i}printf
("%d\n"
,ans)
;return0;
}
後來我在想,是不是只需要輸出一種id的物品,它的重量//通天之分組揹包
#include
#include
#include
using
namespace std;
struct bagbag[
1001];
int n,w;
bool
cmp(bag a,bag b)
int dp[
1001][
1001];
intmain()
//對每個組分別用01揹包
int ans=0;
for(
int i=
0;i}printf
("%d\n"
,re)
;return0;
}而且樣例過得和40分的那個還不一樣,氣死我啦~
下面是:
ac的大佬的**~~ 主要是我寫不動了
#include
#include
#include
#include
using
namespace std;
int zhong[
1001
],jia[
1001
],a[
1001][
1001
],bb[
1001];
//物品的重量 價值 記錄分組 揹包
intmain()
for(
int i =
1;i <= mxzu;
++ i)
for(
int j = m;j >=
0;j --
)for
(int k =
1;k <= a[i][0
];++ k)
if(j >= zhong[a[i]
[k]]
)//判斷是否越界
bb[j]
=max
(bb[j]
,bb[j - zhong[a[i]
[k]]
]+ jia[a[i]
[k]]);
//比較找最大的然後更新
printf
("%d\n"
,bb[m]);
return0;
}
//通天之分組揹包
//模板題目
#include
#include
#include
using
namespace std;
const
int maxn=
1011
;struct nodegroup[maxn]
[maxn]
;int num[maxn]
,dp[maxn]
;int m,n,maxl=
-10000
;int
main()
for(
int i=
1;i<=maxl;i++)}
}}}printf
("%d\n"
,dp[m]);
return0;
}
菜鳥部落格第一彈
隨著乙個多月的大學生活結束,今天終於開始了畢業的第一天工作。請了40多天的假,本來以為工作會悲劇的。但到公司同事和領導的關心使我擔心的小心感到了溫暖。早就想實現這個計畫,想在正式工作的時候寫部落格,也就是想記錄下每天的工作和每天的心情。寫博主要是記下這剛開始艱苦的歲月,不求對別人幫助,本人是菜鳥,歡...
oracle學習第一彈
每當我們建立資料庫例項的時候,就會自動的建立三個使用者 sys使用者 超級管理員,許可權最大 system使用者 系統管理員 scott使用者 普通使用者 有三種方式登入oracle資料庫 1.命令列sqlplus 2.sql developer 3.企業管理器,通過web訪問 sql plus是o...
日常翻譯 第一彈
第一題鏈結 題意 夏洛克和華生正在玩乙個遊戲 nim 這個遊戲有n堆石子被標註成piles1,piles2,pilesn n是石子最大堆數 夏洛克總是第乙個,華生跟他交替進行操作 在每一次操作中都有且只有兩種可能的情況 1.選擇一堆並且從中拿走k個石子,k 0 2.從每一堆石子中都拿走k個石子,k ...