貪心,按長度排序,
對於第一幅牌裡面的,在第二個裡面,找乙個長度小於,高度最接近的牌
進行覆蓋。
考場上的我離正解只差乙個小於號之遙。。。。。。。
1 #include 2 #includeview code3 #include 4 #include 5 #include
6using
namespace
std;
7int
n;8 multiset s;
9struct node a[100005],b[100005
];10
int cmp(node i,node j)
11int
main()
1233
if(s.empty())continue
;34 multiset::iterator it=s.upper_bound(a[i].y);
35if (it==s.begin()) continue; it--;
36 ans++; s.erase(it);37}
38 printf("
%d\n
",ans);39}
40return0;
41 }
不會做,手玩30分
正解dp||爆搜
1 2 4 8 ...
1 3 7 15 31 ...
int(log(n)/log(2))+1
方案總數:dp,搜尋
2^0+2^1+...+2^k = o(n)
k=log(n)
dfs(max,sum,s) // max金幣最大值,sum所有金幣的和,s金幣的數量
dp[i][j][k] 當前有i個金幣,金幣和是j,最大的金幣k。
if (dp[i][j][k]) 列舉下一枚金幣是啥。
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6const
int maxn=1e6;
7 inline int
read()811
while(c>='
0'&&c<='
9') x=x*10+c-48,c=getchar();return x*flag;12}
13int
n;14
intmain()
15
1 #include 2 #include 3 #include 4 #include 5 #include 6標程using
namespace
std;
7int n,sum,ans,dp[1005][1005],dp[1005][1005
],i,j,k,l;
8int
main()923
}24for (j=1; j<=n; j++) ans+=dp[n][j];
25 cout
'<
26return0;
27 }
lyk在學習dp,有一天它看到了一道關於dp的題目。
這個題目是這個樣子的:一開始有n個數,一段區間的價值為這段區間相同的數的對數。我們想把這n個數切成恰好k段區間。之後這n個數的價值為這k段區間的價值和。我們想讓最終這n個數的價值和盡可能少。
例如6個數1,1,2,2,3,3要切成3段,乙個好方法是切成[1],[1,2],[2,3,3],這樣只有第三個區間有1的價值。因此這6個數的價值為1。
lyk並不會做,丟給了你。
輸入格式:
第一行兩個數n,k。
接下來一行n個數ai表示這n個數。
輸出格式:
乙個數表示答案。
輸入樣例#1:
複製
10 2輸出樣例#1:1 2 1 2 1 2 1 2 1 2
複製
8對於30%的資料n<=10。
對於60%的資料n<=1000。
對於100%的資料1<=n<=100000,1<=k<=min(n,20),1<=ai<=n。
其中有30%的資料滿足ai完全相同均勻分布在所有資料中。
考場上我想出60分的dp了
但是我感覺不對,直覺告訴我一定不對,。
但實際上是對的mmp。。。。。
打了30分暴力走人,,
正解:dp[i][j] 1~i 切了j刀,的最優解
dp[i][j]=min
可以證明這個轉移方程具有單調性
20*n^2的簡單dp -> 在固定j的情況下 隨著i的增大,k不降 -> 分治求dp值
1 #include 2 #include 3 #include 4view code#define n 1000011
5#define min(x, y) ((x) < (y) ? (x) : (y))
6#define max(x, y) ((x) > (y) ? (x) : (y))
7using
namespace
std;
8int
n, q, ans;
9int
f[n];
1011
struct
node
12p[n], t[n];
1516 inline int
read()
1724
25 inline bool
cmp(node x, node y)
2629
30 inline int find(int
x)31
3435 inline bool check(int
k)36
53else
5461}62
//cout<63
if(find(lmax) > rmin) return1;
64return0;
65}6667
intmain()
6886 printf("
%d\n
", ans);
87return0;
88 }
濟南刷題衝刺 Day1 下午
time limit 1000ms memory limit 128mb 題目描述 lyk出了道水題。這個水題是這樣的 有兩副牌,每副牌都有n張。對於第一副牌的每張牌長和寬分別是xi和yi。對於第二副牌的每張牌長和寬分別是aj和bj。第一副牌的第i張牌能覆蓋第二副牌的第j張牌當且僅當xi aj並且y...
Day 1 下午 乙太網幀結構
iso 國際標準化認證 osi ieee 電氣電子工程師協會 ietf 網際網路工程小組 soi標椎 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層 上三層為產生資料 下四層 通訊協議相當於網路中的語言 應用層 通過埠去呼叫應用程式 埠應用層 http 80 https 443,8080...
python學習 day11下午
單例模式,可以用在資料庫,這樣只建立一條管道即可 class a def new cls,args,kwargs if not hasattr a,xiaogou cls.xiaogou object.new cls return cls.xiaogou def init self,name sel...