※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

2271 KUPC

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2271
文字列から看板を作る問題。

解法
一番簡単な部類の問題なので集計するだけです。


#include<stdio.h>
int main(){
	char text[302],c;
	int count[4]={0};
	scanf("%s",text);
	for(int i=0;text[i]!='\0';i++){
		c=text[i];
		if(c=='K')count[0]++;
		if(c=='U')count[1]++;
		if(c=='P')count[2]++;
		if(c=='C')count[3]++;
	}
	int ans=count[0];
	for(int i=0;i<4;i++)if(ans>count[i])ans=count[i];
	printf("%d\n",ans);
}

2272 Cicada

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2272
通路を最小コストで移動する問題。

解法
2番目位に簡単な部類の問題なので動的計画法で一発です。


#include<stdio.h>
#include<string.h>

int main(){
	int map[52][52];
	char text[60];
	int h,w,n;
	scanf("%d %d",&h,&w);
	map[0][0]=0;
	for(int i=0;i<h;i++){
		scanf("%s",text);
		for(int j=0;j<w;j++){
			n=text[j]-'0';
			if(i==0&&j>0){
				map[i][j]=map[i][j-1]+n;
			}else if(i>0&&j==0){
				map[i][j]=map[i-1][j]+n;
			}else if(i>0&&j>0){
				map[i][j]=(map[i-1][j]<map[i][j-1]?map[i-1][j]:map[i][j-1])+n;
			}
		}
	}
	printf("%d\n",map[h-1][w-1]);
}