Skip to content

Commit ba0f47f

Browse files
committed
add a few ural
1 parent 88f0437 commit ba0f47f

File tree

13 files changed

+21086
-150
lines changed

13 files changed

+21086
-150
lines changed

ural/1017.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <queue>
6+
#include <list>
7+
#include <stack>
8+
#include <map>
9+
#include <set>
10+
using namespace std;
11+
12+
#define DEBUG
13+
#define REP(i,a) for(i=0;i<a;i++)
14+
#define FOR(i,a,b) for(i=a;i<b;i++)
15+
#define VE vector<int>
16+
#define SZ size()
17+
#define PB push_back
18+
19+
20+
typedef long long ll;
21+
22+
const int MAXN = 501;
23+
ll dp[MAXN][MAXN];
24+
int N;
25+
26+
int main(){
27+
cin>>N;
28+
dp[0][0] = 1LL;
29+
ll ans = 0;
30+
for(int s=0; s<=N; s++){
31+
for(int t=0; t<=N; t++){
32+
if(dp[s][t]!=0){
33+
for(int n=t+1; n<N; n++){
34+
if(n+s<=N){
35+
dp[n+s][n] += dp[s][t];
36+
//cout<<"ok... dp["<<n+s<<"]["<<n<<"] = "<<dp[n+s][n]<<endl;
37+
}
38+
}
39+
}
40+
}
41+
}
42+
for(int i=1; i<=N; i++){
43+
ans += dp[N][i];
44+
}
45+
cout<<ans<<endl;
46+
47+
return 0;
48+
}
49+

ural/1073.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <queue>
6+
#include <list>
7+
#include <stack>
8+
#include <map>
9+
#include <set>
10+
using namespace std;
11+
12+
#define DEBUG
13+
#define REP(i,a) for(i=0;i<a;i++)
14+
#define FOR(i,a,b) for(i=a;i<b;i++)
15+
#define VE vector<int>
16+
#define SZ size()
17+
#define PB push_back
18+
19+
const int MAXN = 250;
20+
const int MAXM = 60001;
21+
int squres[MAXN], N;
22+
bool dp[MAXN][MAXM];
23+
24+
int main(){
25+
cin>>N;
26+
dp[0][0] = 1;
27+
int ptr = 0;
28+
for(int i=1; i*i<MAXM; i++){
29+
squres[ptr++] = i*i;
30+
}
31+
32+
bool ok = false;
33+
for(int i=0; i+1<MAXN; i++){
34+
for(int j=0; j<=N; j++){
35+
if(dp[i][j]){
36+
for(int k=0; k<ptr; k++){
37+
if(j+squres[k] < MAXM){
38+
dp[i+1][j+squres[k]] = 1;
39+
if(dp[i+1][N])
40+
ok = true;
41+
}else{
42+
break;
43+
}
44+
}
45+
}
46+
}
47+
if(ok==true)break;
48+
}
49+
for(int i=1; i<MAXN; i++){
50+
if(dp[i][N]){
51+
cout<<i<<endl;
52+
break;
53+
}
54+
}
55+
56+
57+
return 0;
58+
}
59+

ural/1073_2.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <queue>
6+
#include <list>
7+
#include <stack>
8+
#include <map>
9+
#include <set>
10+
using namespace std;
11+
12+
#define DEBUG
13+
#define REP(i,a) for(i=0;i<a;i++)
14+
#define FOR(i,a,b) for(i=a;i<b;i++)
15+
#define VE vector<int>
16+
#define SZ size()
17+
#define PB push_back
18+
19+
const int MAXM = 90000, INF=100000000;
20+
int squres[MAXM], N;
21+
int dp[MAXM];
22+
23+
int main(){
24+
cin>>N;
25+
for(int i=0; i<MAXM; i++)dp[i] = INF;
26+
27+
dp[0] = 0;
28+
for(int i=0; i*i<=N; i++){
29+
for(int j=i*i; j<=N; j++){
30+
dp[j] = min(dp[j], dp[j-i*i]+1);
31+
}
32+
}
33+
cout<<dp[N]<<endl;
34+
35+
return 0;
36+
}
37+

ural/1152.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <queue>
6+
#include <list>
7+
#include <stack>
8+
#include <map>
9+
#include <set>
10+
using namespace std;
11+
12+
#define DEBUG
13+
#define REP(i,a) for(i=0;i<a;i++)
14+
#define FOR(i,a,b) for(i=a;i<b;i++)
15+
#define VE vector<int>
16+
#define SZ size()
17+
#define PB push_back
18+
19+
const int MAXN = 21;
20+
const int INF = 99999999;
21+
int N;
22+
int data[MAXN];
23+
int dp[1<<MAXN];
24+
25+
int get_ans(int state){
26+
if(state==0){
27+
return 0;
28+
}
29+
if(dp[state]!=-1)return dp[state];
30+
31+
32+
int damage= 0;
33+
for(int i=0; i<N; i++){
34+
if(((state>>i)&1)==1){
35+
damage += data[i];
36+
}
37+
}
38+
39+
int cur = INF;
40+
for(int i=0; i<N; i++){
41+
int f = (i-1+N)%N;
42+
int m = i;
43+
int n = (i+1)%N;
44+
int td = damage;
45+
46+
if( ( (state>>f)&1 ) + ((state>>m)&1) + ((state>>n)&1) == 0){
47+
continue;
48+
}
49+
int ns = state;;
50+
if(((state>>f)&1)==1){
51+
ns = (1<<f)^ns;
52+
td -= data[f];
53+
}
54+
if(((state>>m)&1)==1){
55+
ns = (1<<m)^ns;
56+
td -= data[m];
57+
}
58+
if(((state>>n)&1) == 1){
59+
ns = (1<<n)^ns;
60+
td -= data[n];
61+
}
62+
63+
int next = get_ans(ns);
64+
cur = min(cur, next + td);
65+
}
66+
67+
dp[state] = cur;
68+
return cur;
69+
70+
}
71+
72+
void work(){
73+
for(int i=0; i<(1<<MAXN); i++){
74+
dp[i] = -1;
75+
}
76+
77+
int ans = get_ans((1<<N)-1);
78+
79+
cout<<ans<<endl;
80+
}
81+
82+
int main(){
83+
cin>>N;
84+
for(int i=0; i<N;i++)cin>>data[i];
85+
86+
87+
work();
88+
return 0;
89+
}
90+

ural/1167.cpp

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <vector>
4+
#include <algorithm>
5+
#include <queue>
6+
#include <list>
7+
#include <stack>
8+
#include <map>
9+
#include <set>
10+
using namespace std;
11+
12+
#define DEBUG
13+
#define REP(i,a) for(i=0;i<a;i++)
14+
#define FOR(i,a,b) for(i=a;i<b;i++)
15+
#define VE vector<int>
16+
#define SZ size()
17+
#define PB push_back
18+
const int MAXN = 502;
19+
int N, K, h[MAXN];
20+
21+
//int dp[MAXN][MAXN];
22+
int dp[MAXN];
23+
int zero[MAXN], one[MAXN];
24+
const int INF = 99999999;
25+
void pre(){
26+
//zero[1] = (h[0]==0?1:0);
27+
//one[1] = (h[0]==1?1:0);
28+
for(int i=1; i<=N; i++){
29+
if(h[i-1] == 1){
30+
one[i] += one[i-1] + 1;
31+
zero[i] = zero[i-1];
32+
}else{
33+
zero[i] += zero[i-1]+1;
34+
one[i] = one[i-1];
35+
}
36+
//cout<<"zero["<<i<<"] = "<<zero[i]<<endl;
37+
//cout<<"one["<<i<<"] = "<<one[i]<<endl;
38+
}
39+
}
40+
41+
42+
void work(){
43+
pre();
44+
for(int i=0; i<MAXN; i++)for(int j=0; j<MAXN; j++){
45+
//dp[i][j ] = INF;
46+
dp[i] = INF;
47+
}
48+
49+
//dp[0][0] = 0;
50+
dp[0] = 0;
51+
52+
for(int k=0; k<K; k++){
53+
for(int i=1; i<=N; i++){
54+
for(int j=0; j<i; j++){
55+
int n_one = one[i] - one[j];
56+
int n_zero = zero[i] - zero[j];
57+
int v = n_one * n_zero;
58+
cout<<i<<" "<<j<<" v = "<<n_one<<"*"<<n_zero<<" = "<<v<<endl;
59+
//dp[i][k+1] = min(dp[i][k+1], dp[j][k]+v);
60+
dp[i] = min(dp[i], dp[j] + v);
61+
//cout<<"dp["<<i<<"]["<<k+1<<"] = "<<dp[i][k+1]<<endl;
62+
cout<<"dp["<<i<<"] = "<<dp[i]<<endl;
63+
}
64+
}
65+
}
66+
67+
//cout<<dp[N][K]<<endl;
68+
for(int i=0; i<=N; i++){
69+
cout<<dp[i]<<" ";
70+
}cout<<endl;
71+
72+
cout<<dp[N]<<endl;
73+
74+
}
75+
76+
int main(){
77+
cin>>N>>K;
78+
for(int i=0; i<N; i++){
79+
cin>>h[i];
80+
}
81+
work();
82+
return 0;
83+
84+
}
85+

0 commit comments

Comments
 (0)